gpt4 book ai didi

awk - 打印匹配记录后的下一条记录

转载 作者:行者123 更新时间:2023-12-04 23:10:36 26 4
gpt4 key购买 nike

我试图在使用 awk 匹配字段后获取下一个字段。

有没有办法做到这一点,或者我是否需要将记录扫描到数组中,然后检查数组中的每个字段并在此之后打印一个?

到目前为止我所拥有的:

文件格式为:

<FIELD><separator "1"><VALUE><separator "1"><FIELD><separator "1"><VALUE> 

... 等等, field|value对是重复的,至少是一对成对或多对 <10 每行

数据.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) }' 

关于awk - 打印匹配记录后的下一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1761341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com