我有一个文件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
答案 0 :(得分:1)
使用GNU sed:
sort strings.txt | uniq -c | sort -n | sed -r 's/([0-9]) /\1\t/' > uniq.counts
输出到uniq.counts:
1 some string with spaces 5 some-other,string 25 most;frequent:string
如果你想编辑你的文件&#34;就地&#34;使用sed的选项-i
。
答案 1 :(得分:1)
您可以在写入sed
之前简单地将排序等输出传送到uniq.counts
,例如添加:
| sed -e 's/^\([0-9][0-9]*\)\(.*$\)/\1\t\2/' > uniq.counts
完整的表达方式是:
$ sort strings.txt | uniq -c | sort -n | \
sed -e 's/^\([0-9][0-9]*\)\(.*$\)/\1\t\2/' > uniq.counts
(为了清楚起见,包括续行)
答案 2 :(得分:1)
你可以这样做:
sort strings.txt | uniq -c | sort -n | sed -E 's/^ *//; s/ /\t/' > uniq.counts
sed
将首先删除行开头的所有前导空格(在计数之前),然后在计数到tab
字符后将其替换为空格。