首页 > 解决方案 > 有没有办法根据一个字段(比如说field3)从2个文件(A anb)中获取唯一行,其中A在重复的情况下优先?

问题描述

我有 2 个文件 A.txt 和 B.txt。我需要字段 2 的唯一行列表,如果与 B.txt 匹配,A.txt 优先。

猫 A.txt:

HHH,香蕉,3
HHH,苹果,2
JJJ,柠檬,100

猫 B.txt:

LLL,梨,4
CCC,苹果,9
TTT,柠檬,9

结果应该是:

HHH,香蕉,3
HHH,苹果,2
JJJ,柠檬,100
LLL,梨,4

值柠檬和苹果在两个文件中重复,但 A.txt 优先。

我尝试使用 gawk、sed 和 cut 在 bash 中执行此操作,但看起来太乱了。另外,有人告诉我这必须在python中

没有可显示的代码。寻求帮助

结果应该是:

HHH,香蕉,3
HHH,苹果,2
JJJ,柠檬,100
LLL,梨,4

标签: pythonbash

解决方案


您可以使用以下awk命令:

awk -F, '!d[$2]++' A.txt B.txt

这输出:

HHH,banana,3
HHH,apple,2
JJJ,lemon,100
LLL,pear,4

说明:

  • -F,告诉awk用作,字段分隔符
  • d是一个数组,存储它看到给定键的次数
  • $2指第二个字段,这是您要用来唯一标识行的键
  • 对于脚本第一次看到的每个键,d[$2]将自动评估为0
  • 使用 not 运算符!!0变为真值,并awk执行打印整行的默认操作
  • 使用后面的++运算符,d[$2]d[$2]值将1在其值被评估后递增
  • 这样下次脚本看到具有相同键的行时,d[$2]将是非零的,并且!d[$2]会导致错误值,awk因此不会执行任何操作
  • a.txt之前列出,b.txt所以它首先被处理,所以它的行优先于那些b.txt

推荐阅读