AWK - 打印下一条记录下匹配记录 [英] Awk - print next record following matched record
问题描述
我想用awk匹配后场拿到下一场。
I'm trying to get a next field after matching field using awk.
有一个选项来做到这一点还是需要扫描记录到数组那么阵列检查每个字段并打印后的人吗?
Is there an option to do that or do I need to scan the record into array then check each field in array and print the one after that?
我到目前为止有:
文件格式为:
<FIELD><separator "1"><VALUE><separator "1"><FIELD><separator "1"><VALUE>
...等,字段|值
反复对,将至少有一对在网上或多个对小于10每行
... and so on, field|value
pairs are repeated, will be at least one pair in line or multiple pairs <10 per line
dat.txt:
FIELDA01VALUEA01FIELDA21VALUEA21FIELDA31VALUEA3
FIELDB01VALUEB01FIELDB21VALUEB21FIELDB31VALUEB3
FIELDC01VALUEC01FIELDC21VALUEC21FIELDC31VALUEC3
FIELDD01VALUED01FIELDD21VALUED21FIELDD31VALUED3
FIELDE01VALUEE01FIELDE21VALUEE21FIELDE31VALUEE3
使用简单的awk脚本它打印一行匹配FIELDB2第二场:
With simple awk script which prints the second field on a line matching 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 $ C打印就行了下一条记录$ C>匹配,在这个具体的例子,当
FIELDB2
匹配我需要打印 VALUEB2
。
Now I don't know which FIELDXX
will match but I would like to print the next record on the line after FIELDXX
that matched, in this specific example when FIELDB2
matches I need to print VALUEB2
.
有什么建议?
推荐答案
您可以匹配行,然后在一个匹配的领域循环,并打印下一条记录:
You can match the line, then loop over the fields for a match, and print the next record:
awk -F1 '/FIELDB2/ { for (x=1;x<=NF;x++) if ($x~"FIELDB2") print $(x+1) }'
这篇关于AWK - 打印下一条记录下匹配记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!