gpt4 book ai didi

linux - 使用 awk 比较 2 个文件 - 如果第二个字段相同,则对第一个字段求​​和并打印它 - 如果不打印它(对于两个文件中的不匹配条目为 true)

转载 作者:太空宇宙 更新时间:2023-11-04 05:35:01 27 4
gpt4 key购买 nike

我有两个文件 -

文件1:

2 923000026531

1 923000031178

2 923000050000

1 923000050278

1 923000051178

1 923000060000

文件2:

2 923000050000

3 923000050278

1 923000051178

1 923000060000

4 923000026531

1 923335980059

我想使用 awk 实现以下目标:

1-如果第二个字段相同,则对第一个字段求​​和并打印。

2- 如果第二个字段不相同,则按原样打印该行。这将有两种情况。

2(a) 如果第二个字段不同且记录属于第一个文件

2(b) 如果第二个字段不相同且记录属于第二个文件

我使用此命令实现了以下目标:

Command: gawk 'FNR==NR{f1[$2]=$1;next}$2 in f1{print f1[$2]+$1,$2}!($2 in f1){print $0}' f1 f2

Result:

4 923000050000

4 923000050278

2 923000051178

2 923000060000

6 923000026531

1 923335980059

但是,这不包含第一个文件中的记录以及第二个字段与第二个文件的第二个字段不匹配的记录,即情况 2(a),更具体地说,最终文件中不存在以下记录:

1 923000031178

我知道使用额外命令有多种解决方法,但我很感兴趣是否可以在同一个命令中以某种方式完成此操作。

最佳答案

尝试一下这句话:

$ awk '{a[$2]+=$1}END{for(x in a)print a[x], x}' f1 f2
2 923000060000
2 923000051178
1 923000031178
6 923000026531
4 923000050278
4 923000050000
1 923335980059

关于linux - 使用 awk 比较 2 个文件 - 如果第二个字段相同,则对第一个字段求​​和并打印它 - 如果不打印它(对于两个文件中的不匹配条目为 true),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49940257/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com