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 和 shell 类似,请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."

相关内容