如何使用脚本对文件中的数据进行排序?

如何使用脚本对文件中的数据进行排序?

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

这是另一种解决方案,仅基于awksort

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

相关内容