bash - 使用 awk 提取文件的修改内容

标签 bash awk

我有 2 个文件,其中包含超过 1000 万行,我想以有效的方式比较这 2 个文件,在我的情况下,我尝试使用 awk 获得以下答案,我是坚持获取修改内容部分

Sample FIle (a1.txt)
A,1
B,2
C,3
D,4

Sample FIle (b1.txt)   
B,2
C,55 <- Mod data
D,4
E,5  <- new data
F,6  <- new data
Z,11 <- new data

* **A,1 删除和修改仅适用于第 2 列

这是我的代码和预期输出

新添加的内容 - 工作正常

awk -F',' 'NR==FNR{++a[$1];next} {line++;if(!(a[$1])){print $0}}' a1.txt b1.txt 

E,5
F,6
Z,11

已删除内容 - 工作正常

awk -F',' 'NR==FNR{++a[$1];next} {line++;if(!(a[$1])){print $0}}' b1.txt a1.txt

A,1

修改内容

awk -F',' 'NR==FNR{++a[$2];next} {line++;if(!(a[$2])){print $0}}' a1.txt b1.txt

电流输出(非必需)

C,55
E,5
F,6
Z,11

但需要输出

C,55

这将返回机器人新添加的内容+修改的内容

请帮我解决这个问题

最佳答案

awk -F',' 'NR==FNR{a[$1]=$2;next} {line++;if(a[$1] != $2 && a[$1]){print $0}}' v1 v2
C,55


cat v1
A,1
B,2
C,3
D,4

cat v2
B,2
C,55
D,4
E,5 
F,6 
Z,11

关于bash - 使用 awk 提取文件的修改内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48655696/

相关文章:

git - 在多个存储库上运行 git gc

bash - 测试证书数据库密码是否正确的脚本

linux - vim/vi/sed : Act on a certain number of lines from the end of the file

bash - 当逗号用作数字组分隔符时如何使 awk 正确添加

linux - 使用sed修改配置

git - 尝试推送到 GitHub,现在收到 'fatal: bad default revision'

bash - 如何使用命令输出填充 bash 关联数组?

regex - 使用 sed 仅获取捕获组中的字母数字字符

Bash:如何使用 sed 仅替换文件中的最后一次出现?

shell - awk 中的管道如何工作(通过保留标题进行排序)