gpt4 book ai didi

linux - 根据特定列在两个文件之间创建差异

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:19 27 4
gpt4 key购买 nike

我有以下问题。

假设我有 2 个文件:

A.txt

1    A1
2 A2

B.txt

1    B1
2 B2
3 B3

我想制作仅基于第一列值的差异,所以结果应该是

3     B3

如何使用 linux 中的 bash 解决这个问题?

最佳答案

[ awk ]是你的 friend

awk 'NR==FNR{f[$1];next}{if($1 in f){next}else{print}}' A.txt B.txt

或者更简单的说

awk 'NR==FNR{f[$1];next}!($1 in f){print}' A.txt B.txt

或者更简单

awk 'NR==FNR{f[$1];next}!($1 in f)' A.txt B.txt

一些解释肯定会有帮助

  1. NRFNR 是 awk 内置变量,代表 到目前为止处理的记录总数 - 包括当前记录数 到目前为止在当前文件中处理的记录总数(包括当前记录数) 分别为,并且它们仅在处理的第一个文件中相等。

  2. f[$1] 首先创建数组 f,如果相同的键不存在,则添加 $1 作为键'还不存在。如果未分配任何值,则 f[$1] 会自动初始化为零,但这方面在您的情况下找不到用处

  3. next 转到下一条记录,不处理 awk 脚本的其余部分。

  4. 请注意,{if($1 in f){next}else{print}} 部分将仅针对第二个(以及后续文件,如果有的话)文件进行处理。
  5. $1 in f 检查键 $1 是否存在于数组 f
  6. if-else-print 部分是不言自明的。
  7. 请注意,在第三个版本中,省略了 {print},因为 awk 的默认操作是打印!!

关于linux - 根据特定列在两个文件之间创建差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38739213/

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