/ループをawk
使用してシェル変数を渡して、次のことを繰り返して達成するにはどうすればよいですか?for
while
以下のテキストファイルがあります。
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
ファイルから各行を読み込むたびに、名前の数が増加します。最後に、名前と関連数が出力されます。
ここではシェル変数は使用されません。