logs.txt
我有一个包含重复数字的文件:
1 QWE
1 ASD
1 QWE
1 QWE
1 QWE
1 qwe
12
22 qwe
2 aaa
2 vcc
2 xxx
4 asa
44 qwe
4 gfd
4 bcx
5
6 kuy
7
76 lol
5
4 ggg
23
2 ttt
34
5
5
76
5
6
78
99
8
88
7
6
88
88
88
88 wer
88 tyu
99 dsf
78 dfg
78 fgh
78
78 qwe
6 qwe
5
22 qwe
我需要对它们进行排序。所以最高的应该在上面。例如:数字 1 重复 20 次,数字 2 重复 44 次...
20 1
44 2
1 3
5 4
.....
我运行这个命令:
awk '{print $1}' logs.txt >> log2.txt
cat log2.txt | uniq -c >> log3.txt
sort -n srp >> log4.txt
tac log4.txt > log5.txt
它对我有用,但花了很多时间!我想将所有命令放入文件中执行。我需要创建一个脚本!
答案1
您只需要:
sort -rnk1 file | awk '{print $1}' | uniq -c | sort -nk2
或者如果您在第一个字段中只有数字:
sort -rnk1 file | tr -cs 0-9 '[\n*]' | uniq -c | sort -nk2
答案2
这是另一种解决方案,仅基于awk
和sort
:
awk '{a[$1]++} END{for(i in a)print a[i],i}' logs.txt | sort -k2n
答案3
GNUawk
允许通过 控制数组遍历顺序PROCINFO["sorted_in"]
,所以
awk 'BEGIN{PROCINFO["sorted_in"] = "@val_num_desc"}; {a[$1]++};
END{for (k in a) print k, a[k]}' logs.txt