我有一个文件,其结构大致如下:
测试:
我想要的是当第4列和第5列在第2列和第3列中,但第2列没有出现在当前行的第2列中时,得到第一列。这有点混乱,但它将是这样的:我相信我几乎可以使用以下代码:
cat test | awk 'NR==FNR {{a[$4" "$5]=a[$4" "$5]" "$1};next} $2" "$3 in a {print a[$2" "$3],$1}' - test
但我得到的输出是:有什么帮助吗?谢谢你!
xnifntxz1#
(详细说明我的意见)此awk过程使用主操作块来构建一个表示输入表的二维数组。然后,END块将每一行与所有其他行进行成对比较。逻辑将查找其中一行中的第4项和第5项与另一行中的第2项和第3项匹配的行,但如果第2项包含与之进行比较的行的第1项,则排除这些行:(输入数据来自名为data.txt的文件)
awk
END
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条答案
按热度按时间xnifntxz1#
(详细说明我的意见)
此
awk
过程使用主操作块来构建一个表示输入表的二维数组。然后,END
块将每一行与所有其他行进行成对比较。逻辑将查找其中一行中的第4项和第5项与另一行中的第2项和第3项匹配的行,但如果第2项包含与之进行比较的行的第1项,则排除这些行:(输入数据来自名为
data.txt
的文件)输出量: