按“行内容”频率对文件进行排序

按“行内容”频率对文件进行排序

假设有 3 个文本文件。

1.txt:

a
b
c

2.txt:

f
c
d

3.txt:

b
c
f

我如何按频率对它们进行排序“行内容”?(以防按字母顺序发生冲突)

结果:

c
b
f
a
d

答案1

您可以使用sortuniq根据频率对线路进行排序。

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需要排序的输入。第二次是因为需要按计数(频率)将行按降序排列。

相关内容