假设文件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