BEGIN/END 文を使用して発生回数を計算する

BEGIN/END 文を使用して発生回数を計算する

数字のリストがあります。

2
1
3
2
2
2
1

まず、ファイルログがあります。 IDをすべて抽出しました。では、各数の発生回数をどのように計算して次のように表示できますか? (最初は数字、2番目はその数が表示される回数です)

2,4
1,2
3,1

私は考えがあるかもしれません:

awk -F'|' 'BEGIN{print "count", "lineNum"}{print gsub(/t/,"") "\t" NR}' file

答え1

echo "$numbers" | sort | uniq -c | awk -v OFS=, '{print $2,$1}' | sort -t, -k2nr

どのように機能するのか疑問がある場合、それを分解する最も独学的な方法は分割して行うことです。

echo "$numbers" | sort
echo "$numbers" | sort | uniq -c 
# and so on

もちろん、sortとuniqのマニュアルページを読んでください。


GNU awkを使用すると、次のことができます。

echo "$numbers" | gawk '
  {count[$1]++}
  END {
    PROCINFO["sorted_in"] = "@val_num_desc"
    OFS = ","
    for (thing in count) print thing, count[thing]
  }
'

関連情報