如何使用awk获取文件1中而不是文件2中创建的数组的值



假设文件1包含以下内容:

1=apple
2=mango
3=banana
4=litchi 
7=papaya

和文件2:

1=apple
2=banana
3=grapes
4=kiwi
5=orange
6=peach

我需要最终输出为:

1=apple
2=mango
3=banana
4=litchi
7=papaya
5=orange
6=peach

为文件1创建一个关联数组,并比较文件2中的数组元素,但如何获得文件1中的行和文件2中不存在的行的数组。

使用此代码:

awk -F"=" 'FNR==NR{a[$1]=$0;next;}
{ 
if ($1 in a && $1)
print a[$1]
else if(!$1)
print
else
print $1"="$NF
}' file1 file2

Output
--------
1=apple
2=mango
3=banana
4=litchi
5=orange
6=peach

我能拿到6号钥匙,但没能拿到7号钥匙。

如果我添加这篇文章的条件是:

...
else if(!($1 in a)){ for (i in a) {
print a[i]}}
...

我得到的输出为:

1=apple
2=mango
3=banana
4=litchi
3=banana
2=mango
1=apple
4=litchi
7=papaya
3=banana
2=mango
1=apple
4=litchi
7=papaya

请帮我弄清楚正确的情况。

另一个awk:

$ awk '
BEGIN { 
FS=OFS="="          # field separator
}
NR==FNR {               # process file1
a[$1]=$0            # index on first field
b[$1]               # this is used for seen ones
next
}
{                       # process file2
if($1 in a) {       # if first field found in file1
print a[$1]     # print that instead
delete b[$1]    # delete from b to mark it as seen
} else 
print $0        # print file2 entry if was not in file1
}
END {                   # in the end
for(i in b)         # the ones from file1 not in file2
print a[i]      # output
}' file1 file2

输出:

1=apple
2=mango
3=banana
4=litchi 
5=orange
6=peach
7=papaya

对于这些数据,这似乎给出了正确的结果,但我在问自己,这是否在所有情况下都适用。。。。。😉:

awk -F"=" 'FNR==NR{a[$1]=$0;next;}
{
if(!($1 in a)){ for (i in a) {
if(i>FNR) print a[i]}}
if ($1 in a && $1)
print a[$1]
else if(!$1)
print
else
print $1"="$NF
}' file1 file2

输出:

1=apple
2=mango
3=banana
7=papaya
4=litchi
7=papaya
5=orange
6=peach

相关内容

  • 没有找到相关文章

最新更新