unix 列之间的关系- awk

vddsk6oq  于 2022-11-23  发布在  Unix
关注(0)|答案(1)|浏览(219)

我有一个文件,其结构大致如下:

测试:

我想要的是当第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

但我得到的输出是:
有什么帮助吗?
谢谢你!

xnifntxz

xnifntxz1#

(详细说明我的意见)
awk过程使用主操作块来构建一个表示输入表的二维数组。然后,END块将每一行与所有其他行进行成对比较。逻辑将查找其中一行中的第4项和第5项与另一行中的第2项和第3项匹配的行,但如果第2项包含与之进行比较的行的第1项,则排除这些行:
(输入数据来自名为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

输出量:

相关问题