awkでシェル変数を使用し、for / whileループを使用する

awkでシェル変数を使用し、for / whileループを使用する

/ループをawk使用してシェル変数を渡して、次のことを繰り返して達成するにはどうすればよいですか?forwhile

以下のテキストファイルがあります。

mark     10 20 30
lawrence 40 22 60
mark     11 12 13
mike     15 16 17
lawrence 21 22 23
mike     31 32 33
mike     41 42 47

出力が次のようになります。 (2列目は各名の発生回数を示します。)

もう一つのリクエストがあります。もう一度聞いてすみません。出力は次のとおりです。

マーカーの値が20(3番目の列)の場合、発生は次の列に印刷する必要があります。

mikeの値が32(3番目の列)の場合、その項目は次の列に印刷する必要があります。

ローレンスの値が22(3番目の列)の場合、その項目は次の列に印刷する必要があります。

マルコによる福音書第2章1節

マイク3 1

ローレンス2 2

これがどのように見えるかです。テキストファイルを次のように渡したいと思います。助けてもらえますか?

今使っている命令

n=$(date +"%Y%m%d");

LogDataN=`tail -10 "$n".txt`   -- my text file which contains the above data

A=`echo "$LogDataN" | awk '{ c["$1"]++ } END { for (name in c) print name, c[name] }' `

echo "$A"

ベストアンサー1

awkここでシェル変数を渡す理由はわかりません。

tail "$(date +'%Y%m%d.txt')" |
awk '{ c[$1]++ } END { for (name in c) print name, c[name] }'

tailデフォルトでは、指定されたファイルから最後の10行のテキストを抽出するため、必要ありません-n 10(または使用されなくなりました)。-10このdateコマンドは、読み取るファイル名を作成するために使用されます。

コードは、各名前の発生回数を保持するawk連想配列のキーとして最初の列を使用します。cファイルから各行を読み込むたびに、名前の数が増加します。最後に、名前と関連数が出力されます。

ここではシェル変数は使用されません。

おすすめ記事