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

Shell 如何使用awk获取文件1中而不是文件2中创建的数组的值?,shell,awk,Shell,Awk,假设file1包含以下内容: 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=apple 2=mango 3=banana 4=litchi 3=banana 2=mango 1=apple

假设file1包含以下内容:

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=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
为文件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
7=papaya
5=orange
6=peach
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

除空行外,将符合重复的条件。。不确定您要遵循什么逻辑来保持该值为空line@Sundeep,我有许多特定于客户机的属性文件需要在原始文件中替换,还有一些属性需要按原样打印,如在第一个文件中。需要空间来保持可读性。我尝试了你发布的链接,不幸的是,它没有给我预期的结果,而且这是相当复杂的。我只需要一个条件,在这个条件下,我可以检查数组中的元素,而不是第二个文件中的字段。“我如何获得文件1中的[…]行和文件2中的[…]行?”为什么
1=apple
在您想要的输出中?@Cyrus,1=苹果来自文件1。根本不清楚您想要使用什么逻辑来获得您所说的想要的输出,在您所说的“管道其他输出到<代码>排序获得您想要的输出”,但这不可能产生您问题中所示的输出。谢谢!这给了我想要的结果,但我无法跟上订单,请分享更新,如果可以保留。谢谢,詹姆斯。我宁愿在不安装任何其他软件的情况下使用结果。通过将输出管道化到sort命令,找到了一种解决方法。我纯粹是在研究awk,但这将暂时奏效。谢谢,杰姆斯。如何将输出连接到<代码>排序可能产生输出的中间空行所要求的输出,以及从<代码> 7代码/代码>开始之前的代码行,从“代码> 5”/代码>?这是一个非常令人困惑的问题……尽管木瓜的例子效果很好,但在我的用例中并不适用,但你使用的是同一把钥匙$1。谢谢卢克。