awk - 多个字符串匹配条件,每个条件跨越两个连续行

awk - 多个字符串匹配条件,每个条件跨越两个连续行

我正在尝试开发以下简单awk单行的变体(目前适用于匹配文件每一行中的几个条件):

awk "{ if ($1 == $3 && $2 == $7) print $1,$2}" input.txt > out.txt

我需要的变化将查看两个连续行的所有实例,而不是仅查看单个行。因此,如果第一行是 A,第二行是 B,那么它看起来会是这样的:

awk "{ if (A$1 == B$3 && A$2 == B$7) print A$1,B$1,A$2,B$2}" input.txt > out.txt

之类的东西!输入文件示例如下:

banana apple orange pumpkin potato tomato onion garlic
banana apple banana pumpkin potato tomato onion garlic
lemon grape banana pumpkin potato tomato apple garlic
banana apple orange pumpkin potato tomato onion garlic

它将匹配第 2 行和第 3 行,输出:

banana lemon apple grape

我有相当的信心awk可以做到这一点,并且我已经在此处的相关问题和答案中看到了我认为必要的构建块,但我真的不具备正确编译它的技能。

答案1

您可以将前一行的字段保存在数组中a,并像平常一样访问当前行的前缀为 的字段$

awk '
 a[1]==$3 && a[2]==$7{ print a[1],$1,a[2],$2 }
 { for (i=1;i<=NF;i++) a[i]=$i }
' input.txt > out.txt

相关内容