为两个文本文件中的多行扩展awk脚本,如果两个文件只有一条记录,则不扩展

为两个文本文件中的多行扩展awk脚本,如果两个文件只有一条记录,则不扩展,awk,Awk,我可以生成这个3.txt输出 AA;BB;CC;DD; 从2个文本文件。两个文件只有一条记录 1.txt AA;BB; CC;DD;BB;AA; UU; AA;BB; ZZ;KK; CC;DD;BB;AA; LL;KK; GH;ZZ;SS; 2.txt AA;BB; CC;DD;BB;AA; UU; AA;BB; ZZ;KK; CC;DD;BB;AA; LL;KK; GH;ZZ;SS; 我使用这个awk脚本 BEGIN{ FS=OFS=";&quo

我可以生成这个3.txt输出

AA;BB;CC;DD;
从2个文本文件。两个文件只有一条记录

1.txt

AA;BB;
CC;DD;BB;AA;
UU;    
AA;BB;
ZZ;KK;
CC;DD;BB;AA;
LL;KK;
GH;ZZ;SS;
2.txt

AA;BB;
CC;DD;BB;AA;
UU;    
AA;BB;
ZZ;KK;
CC;DD;BB;AA;
LL;KK;
GH;ZZ;SS;
我使用这个awk脚本

BEGIN{
  FS=OFS=";"
}
{
  for(i=1;i<=NF;i++){
    if(!seen[$i]++){ val=(val?val OFS:"")$i }
  }
  print val
  delete seen
  val=""
}
但我想要什么<我需要更多地考虑一个单一的记录。我试着根据这种情况调整这个脚本。您可以看到,现在这两个文件不仅有一条记录

1.txt

AA;BB;
CC;DD;BB;AA;
UU;    
AA;BB;
ZZ;KK;
CC;DD;BB;AA;
LL;KK;
GH;ZZ;SS;
2.txt

AA;BB;
CC;DD;BB;AA;
UU;    
AA;BB;
ZZ;KK;
CC;DD;BB;AA;
LL;KK;
GH;ZZ;SS;
我尝试生成的输出3.txt如下

UU;
AA;BB;CC;DD;
ZZ;KK;LL;GH;SS;
处理逻辑:

上面的代码只是在数组索引的散列查找中使用文字字符串,所以它不关心输入中有哪些字符
但是关于示例输出:如果在2.txt中,在1.txt中也有公共字段。例如
BB;AA
然后需要将它们连接在一行中,即
AA;BB;复写的副本;DD
;不需要排序,例如,如果输出为
BB,则不相关;AA;DD;抄送唯一需要的条件是避免在同一行中重复字段

当我说“避免重复”时,我的意思是避免这个输出

AA;BB;CC;DD;BB;AA;
因为输出应该是

AA;BB;CC;DD;

也许这就是你想要的:

BEGIN{FS=OFS=";"}
{sub(/;$/,"")}
NR==FNR{
    for (i=1;i<=NF;++i)
        for (j=1;j<=NF;++j)
            if (j!=i&&!b[$i,$j]++)
                a[$i,++c[$i]]=$j
    next
}
{
    delete b
    for (i=1;i<=NF;++i)
        ++b[$i]
    for (i=1;i<=NF;++i)
        for (j=1;j<=c[$i];++j)
            if (!b[a[$i,j]]++)
                $(NF+1)=a[$i,j]
    print
}
以下是之前的一些问题(可能是你的问题——你可能想仔细看看,然后研究如何正确地提出你的问题):


感谢您的努力。很抱歉,您获取输出的逻辑不清楚,请您在这个问题中解释得更清楚一些。看起来和作业一样,这是否回答了您的问题?我我很困惑,如果你有
UU
CC;DD;BB;AA为什么不会是
UU;复写的副本;DD;BB;AA??第一行的
1.txt
2.txt
之间没有重复的字段?是的,这非常有效。非常感谢。