我正在尝试开发以下简单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