awk合并多个文件中的列,附加不同的值并删除相同的值

awk合并多个文件中的列,附加不同的值并删除相同的值,awk,merge,duplicates,Awk,Merge,Duplicates,我有两个文件: try7.txt a 32145 b eioue c 32654895 d bdefgac e kkloi f 6549465 g test123452 h est0124358 try8.txt a 32145562 b eioueddf c 32654 d bdefgac e kkloi f 6549465dww g test123 h est0124358df i 63574968fd j dfsdf

我有两个文件:

try7.txt
a   32145
b   eioue
c   32654895
d   bdefgac
e   kkloi
f   6549465
g   test123452
h   est0124358

try8.txt
a   32145562
b   eioueddf
c   32654
d   bdefgac
e   kkloi
f   6549465dww
g   test123
h   est0124358df
i   63574968fd
j   dfsdfcd5
期望输出:

a  32145562      32145
b  eioueddf      eioue
c  32654         32654895
d  bdefgac       0
e  kkloi         0
f  6549465dww    6549465
g  test123       test123452
h  est0124358df  est0124358
i  63574968fd    0
j  dfsdfcd5      0
实际产量:

a  32145562      32145
b  eioueddf      eioue
c  32654         32654895
d  bdefgac       bdefgac
e  kkloi         kkloi
f  6549465dww    6549465
g  test123       test123452
h  est0124358df  est0124358
i  63574968fd    0
j  dfsdfcd5      0
我发现的代码是:

awk 'NR==FNR{a[$1]=$2;next}
    {if($1 in a){print $0,a[$1];delete a[$1]}
        else print $0,"0"}
    END{for(x in a)print x,"0",a[x]}' try7.txt try8.txt|sort -n|column -t
如何修改这些代码以满足我的要求

有点长

awk 'FNR==NR{a[$1]=$2; next} 
     ($1 in a) && a[$1] != $2{print $1,$2,a[$1]} 
     ($1 in a) && a[$1] == $2 {print $1, $2,"0"} 
     !($1 in a ){print $1, $2, 0}'  try7 try8
将输出为

a  32145562 32145
b eioueddf eioue
c 32654 32654895
d bdefgac 0
e kkloi 0
f 6549465dww 6549465
g test123 test123452
h est0124358df est0124358
i 63574968fd 0
j dfsdfcd5 0

如果两列不同,您想打印两列,但是如果第二列相同,您想打印第二列为零?是的,这样我就可以在后面绘制具有相同名称的行。另一个问题是,这些代码用于两个文件,如何对5个或更多文件执行相同的操作?您能保证特定文件最长吗?您只想将每个文件添加为一列,并将重复的列替换为0?依次对每个文件使用join可能是合并所有文件的最简单方法,这样awk就可以很容易地修复重复的列。不,我不能。我不知道哪个文件最长。那可能是个问题。谢谢你,nu11p01n73R。可以按照我的要求工作,但如何处理多个文件?@Gray如果它基于第一个文件,那么awk只需输入多个文件就可以正常工作。但是输出将仅基于第一个文件中的行。我尝试使用多个输入,但输出类似于循环,即a b c d e f g h i j a b c d e f g…@Gray这将有点困难,但将尝试anyways@Gray当您输入多个文件时,您希望前两列包含哪些文件内容?