我循环遍历文件列表,提取最后一行,并打印第 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."
与其他awk
s 和 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."