awk は NR を使って繰り返し回数を出力します。

awk は NR を使って繰り返し回数を出力します。

ファイルのリストを繰り返して最後の行を抽出し、列8、9、10を印刷します。また、実際に処理されているレコードの総数(NR)である「イベント番号」を出力に印刷する必要があります。最初の列のイベント/レコード番号を次のように出力ファイルに印刷するにはどうすればよいですか?

for i in `ls -d *mcp`; do
tail -1 "$i" | awk  '{ printf "%s %s %s\n", $8, $9, $10}' >> ${Pout}${output}
done
echo "Finished Looping through each file."

私が望む出力は次のとおりです。

1 45 60 5
2 30 67 3
3 40 12 4
.
.
.

'45 列は $8、60 列は $9、5 列は $10 を表します。 1、2、3などが出力する必要があります。本質的に行番号を印刷する必要があります。

答え1

この試み:

for i in ./*.mcp; do
    if [ -f "$i" ]; then
        tail -1 "$i"
    fi
done | awk '{ print NR, $8, $9, $10 }'

答え2

GNU awk(バージョン4.x)を使用して次のことを試してください。

awk 'ENDFILE { printf "%d %s %s %s\n", ++c, $8, $9, $10}' *mcp > "${Pout}${output}"

echo "Finished Looping through each file."

他のawksやシェルと同様に、以下を試してくださいbash

for f in *mcp
do
    awk -v c="$((++c))" 'END { printf "%d %s %s %s\n", c, $8, $9, $10}' "$f"
done > "${Pout}${output}"

echo "Finished Looping through each file."

関連情報