AWK - 打印下一条记​​录下匹配记录 [英] Awk - print next record following matched record

查看:90
本文介绍了AWK - 打印下一条记​​录下匹配记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用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 匹配,在这个具体的例子,当 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆