如何使用awk(或其他工具)连续读取3行提取LAST ITERATION后全部数值?
问题说明
待处理大文件存在如下格式的内容片段:
Bla bla bla LAST ITERATION: 1780 6 12 0.689655172413793 -8708.81862246834 -8698.33572943212 -2003.09638506407 -9.912281246897692E-003 Bla bla bla
需要提取LAST ITERATION:之后的所有数值,整合为单行写入输出文件。
原有awk命令仅能获取前两行的对应数值,无法读取第三行的目标值:
awk 'a && NR==n{ print a,b,c,d,$1,$3 } /LAST ITERATION:/{ a=$3; b=$4; c=$5; d=$6; n=NR+1 }' ./$FOLDER/$NAMEDATA >> $NAMEOUTPUT
可行方案
原逻辑仅匹配了标记行的下1行(行号为NR+1),遗漏了后续第二行的数值,调整awk逻辑,匹配到标记行后连续读取后续两行的字段,拼接完成后统一输出即可:
awk ' /LAST ITERATION:/ { # 存储标记行自带的4个数值 line = $3 " " $4 " " $5 " " $6 # 读取下一行,追加3个数值 getline line = line " " $1 " " $2 " " $3 # 读取第三行,追加最后1个数值 getline line = line " " $1 # 输出拼接完成的单行结果 print line } ' ./$FOLDER/$NAMEDATA >> $NAMEOUTPUT
如果文件中存在多组LAST ITERATION:内容块,该命令可批量处理,每组对应输出一行整合后的数值。如果后续行的数值数量和示例有差异,对应调整getline后的字段拼接规则即可。
内容的提问来源于stack exchange,提问作者Yannenou
相关产品推荐
相关产品推荐

