Awk – 在匹配记录后打印下一条记录
发布时间:2020-12-14 01:21:00 所属栏目:Linux 来源:网络整理
导读:我在使用awk匹配字段后尝试获取下一个字段. 是否有选项可以执行此操作,还是需要将记录扫描到数组中然后检查数组中的每个字段并在此之后打印一个字段? 到目前为止我所拥有的: 文件格式为: FIELDseparator "1"VALUEseparator "1"FIELDseparator "1"VALUE …
我在使用awk匹配字段后尝试获取下一个字段.
是否有选项可以执行此操作,还是需要将记录扫描到数组中然后检查数组中的每个字段并在此之后打印一个字段? 到目前为止我所拥有的: 文件格式为: <FIELD><separator "1"><VALUE><separator "1"><FIELD><separator "1"><VALUE> ……等等,重复字段|值对,将至少一行成对或多对<10行/行 dat.txt: FIELDA01VALUEA01FIELDA21VALUEA21FIELDA31VALUEA3 FIELDB01VALUEB01FIELDB21VALUEB21FIELDB31VALUEB3 FIELDC01VALUEC01FIELDC21VALUEC21FIELDC31VALUEC3 FIELDD01VALUED01FIELDD21VALUED21FIELDD31VALUED3 FIELDE01VALUEE01FIELDE21VALUEE21FIELDE31VALUEE3 使用简单的awk脚本在匹配FIELDB2的行上打印第二个字段: #!/bin/awk -f BEGIN { FS = "1" } /FIELDB2/ { print $2 } 运行以上: > ./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) }' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |