我有一个列出字符串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
.