bash sort / uniq -c:如何在输出中使用制表符而不是空格作为分隔符



我有一个列出字符串strings.txt文件,我像这样处理:

sort strings.txt | uniq -c | sort -n > uniq.counts

因此,生成的文件uniq.counts将列出按计数升序排序的 uniq 字符串,如下所示:

 1 some string with    spaces
 5 some-other,string
25 most;frequent:string

请注意,strings.txt中的字符串可能包含空格、逗号、分号和其他分隔符,制表符除外。我怎样才能让uniq.counts采用这种格式:

 1<tab>some string with    spaces
 5<tab>some-other,string
25<tab>most;frequent:string

你可以做:

sort strings.txt | uniq -c | sort -n | sed -E 's/^ *//; s/ /t/' > uniq.counts

sed将首先删除行首(计数之前)的所有前导空格,然后将计数后的空格替换为tab字符。

您可以简单地将排序等的输出通过管道传输到sed,然后再写入uniq.counts,例如 add:

| sed -e 's/^([0-9][0-9]*)(.*$)/1t2/' > uniq.counts

完整的表达式将是:

$ sort strings.txt | uniq -c | sort -n | 
sed -e 's/^([0-9][0-9]*)(.*$)/1t2/' > uniq.counts

(为清楚起见,包括行连续符)

使用 GNU sed:

sort strings.txt | uniq -c | sort -n | sed -r 's/([0-9]) /1t/' > uniq.counts

输出到 uniq.counts:

 1 一些带空格的字符串 5 其他一些,字符串25 最;频繁:字符串

如果要"就地"编辑文件,请使用 sed 的选项 -i .

最新更新