假设有 3 个文本文件。
1.txt:
a
b
c
2.txt:
f
c
d
3.txt:
b
c
f
我如何按频率对它们进行排序“行内容”?(以防按字母顺序发生冲突)
结果:
c
b
f
a
d
答案1
您可以使用sort
和uniq
根据频率对线路进行排序。
sort *.txt | uniq -c | sort -k1,1nr -k2 | sed 's/^ *[0-9]* //'
第二个sort
使用第二个-k2
,按字母顺序对相同频率的行进行排序。最后一个sed
只是删除频率。
答案2
您可以使用 sort 和 uniq 按频率降序排序:
$ sort *.txt | uniq -c | sort -rn
3 c
2 f
2 b
1 d
1 a
如果要删除计数:
$ sort *.txt | uniq -c | sort -rn | sed 's/[[:space:]]*[[:digit:]]*[[:space:]]//'
c
f
b
d
a
请注意,需要两次调用sort
。第一次是因为uniq -c
需要排序的输入。第二次是因为需要按计数(频率)将行按降序排列。