python - 有没有办法根据一个字段(比如说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
解决方案
您可以使用以下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
推荐阅读
- rotation - SwiftUI:使用具有可变模糊效果的 RotationGesture
- python-3.x - 解密后的图像开始良好但变灰
- apache-kafka - 静态 IP 而不是 localhost 上的 Kafka 服务器
- javascript - 从浮点数中删除字母和特殊字符?
- css - Pandas 样式不适用于 Google colab
- php - Composer 安装到目标文件夹
- python - 覆盖两个列表并判断插入位置的最佳方法
- python - 如何使用pandas和glob和python保存文件夹中包含的所有文本文件
- odoo - Odoo 12 服务器错误 KeyError: 'crm.Stage'
- html - Bootstrap CSS 和 Navbar - 如何减少项目之间的空间?