是否有选项可以执行此 *** 作,还是需要将记录扫描到数组中然后检查数组中的每个字段并在此之后打印一个字段?
到目前为止我所拥有的:
文件格式为:
<FIELD><separator "1"><VALUE><separator "1"><FIELD><separator "1"><VALUE>
……等等,重复字段|值对,将至少一行成对或多对<10行/行 dat.txt:
FIELDA01VALUEA01FIELDA21VALUEA21FIELDA31VALUEA3FIELDB01VALUEB01FIELDB21VALUEB21FIELDB31VALUEB3FIELDC01VALUEC01FIELDC21VALUEC21FIELDC31VALUEC3FIELDD01VALUED01FIELDD21VALUED21FIELDD31VALUED3FIELDE01VALUEE01FIELDE21VALUEE21FIELDE31VALUEE3
使用简单的awk脚本在匹配FIELDB2的行上打印第二个字段:
#!/bin/awk -fBEGIN { FS = "1" }/FIELDB2/ { print }
运行以上:
> ./scrpt.awk dat.txt
给我:
VALUEB0
这是因为匹配的行:
FIELDB01VALUEB01FIELDB21VALUEB21FIELDB31VALUEB3
分成记录时:
FIELDB0 VALUEB0 FIELDB2 VALUEB2 FIELDB3 VALUEB3
第二个字段是VALUEB0
现在我不知道哪个FIELDXX会匹配,但是我想在FIELDXX匹配之后打印下一行记录,在这个具体例子中,当FIELDB2匹配时我需要打印VALUEB2.
有什么建议?
解决方法 您可以匹配该行,然后遍历字段以进行匹配,并打印下一条记录:awk -F1 '/FIELDB2/ { for (x=1;x<=NF;x++) if ($x~"FIELDB2") print $(x+1) }'总结
以上是内存溢出为你收集整理的Awk – 在匹配记录后打印下一条记录全部内容,希望文章能够帮你解决Awk – 在匹配记录后打印下一条记录所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)