スクリプトを使用してファイル内のデータをどのようにソートできますか?

スクリプトを使用してファイル内のデータをどのようにソートできますか?

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

GNUでは、配列のawk巡回順序を制御できますPROCINFO["sorted_in"]

awk 'BEGIN{PROCINFO["sorted_in"] = "@val_num_desc"}; {a[$1]++}; 
END{for (k in a) print k, a[k]}' logs.txt

関連情報