Linux命令或脚本计算文本文件中的重复行?
如果我有以下内容的文本文件
red apple green apple green apple orange orange orange
有没有可用于获得以下结果的Linux命令或脚本?
1 red apple 2 green apple 3 orange
通过sort
发送(将相邻的项目放在一起)然后uniq -c
给出计数,即:
sort filename | uniq -c
并以sorting顺序(按频率)获取该列表
sort filename | uniq -c | sort -nr
几乎相同的borribles',但如果你添加d
参数uniq
它只显示重复。
sort filename | uniq -cd | sort -nr
uniq -c file
并且在文件未被sorting的情况下:
sort file | uniq -c
尝试这个
cat myfile.txt| sort| uniq
你可以住在一个按字母sorting的有序列表中:
echo "red apple > green apple > green apple > orange > orange > orange > " | sort -u
?
green apple orange red apple
要么
sort -u FILE
-u代表唯一性,唯一性只有通过sorting才能达到。
保存顺序的解决scheme:
echo "red apple green apple green apple orange orange orange " | { old=""; while read line ; do if [[ $line != $old ]]; then echo $line; old=$line; fi ; done } red apple green apple orange
和一个文件
cat file | { old="" while read line do if [[ $line != $old ]] then echo $line old=$line fi done }
最后两个只删除重复,后面立即 – 适合您的例子。
echo "red apple green apple lila banana green apple " ...
将打印两个苹果,由香蕉分裂。
cat <filename> | sort | uniq -c
为了得到一个计数:
$> egrep -o '\w+' fruits.txt | sort | uniq -c 3 apple 2 green 1 oragen 2 orange 1 red
要得到一个分类计数:
$> egrep -o '\w+' fruits.txt | sort | uniq -c | sort -nk1 1 oragen 1 red 2 green 2 orange 3 apple
编辑
啊哈,这不是沿着字界,我的坏。 以下是用于全行的命令:
$> cat fruits.txt | sort | uniq -c | sort -nk1 1 oragen 1 red apple 2 green apple 2 orange