列之间的关系- awk



我有一个文件,它的结构差不多是这样的:

测试:

1 2 3 4 5
2 4 5 0 0
6 4 5 0 0
7 8 9 10 11
8 10 11 0 0
12 10 11 0 0
13 10 11 0 0
14 2 3 4 5
15 10 11 0 0
16 2 3 4 5
17 2 3 4 5

我想要的是当第4和第5列在第2和第3列时获得第一列,但是第2列没有出现在当前行的第2列中。这有点令人困惑,但它应该是这样的:

1 6
7 12
7 13
7 15
14 6
16 6
17 6

我相信我用这段代码就差不多了:

cat test | awk 'NR==FNR {{a[$4" "$5]=a[$4" "$5]" "$1};next} $2" "$3 in a {print a[$2" "$3],$1}' - test
但是我得到的输出是:
1 14 16 17 2
1 14 16 17 6
7 8
7 12
7 13
7 15

帮忙吗?

谢谢!

(详细说明我的评论)

这个awk过程使用主动作块来构建一个表示输入表的二维数组。然后,END块对每一行与所有其他行进行成对比较。逻辑查找一行中的第4和第5个条目与另一行中的第2和第3个条目匹配的行,但如果第二个条目包含被比较行的第一个条目,则排除行:

(输入数据来自data.txt文件)

awk ' 
{
for (col = 1; col <= NF; col++) {
table[NR, col] = $col;}
}
END {
for (i=1; i<=FNR; i++) {
for(j=1; j<=FNR; j++) {

if (table[i,4]==table[j,2] && table[i,5]==table[j,3] && table[i,2]!=table[j,1]) {
print table[i,1]" "table[j,1];}
}}
}
' data.txt

输出:

1 6
7 12
7 13
7 15
14 6
16 6
17 6

最新更新