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当您输入多个文件时,您希望前两列包含哪些文件内容?