【问题标题】:Getting values in a file which is not present in another file获取文件中不存在于另一个文件中的值
【发布时间】:2017-02-09 22:48:26
【问题描述】:

我有两个文件

文件1.txt:

docker/registry:2.4.2
docker/rethinkdb:latest
docker/swarm:1.0.0

文件2.txt:

docker/registry:2.4.1
docker/rethinkdb:1.0.0
docker/swarm:1.0.0

输出应该是:

docker/registry:2.4.2
docker/rethinkdb:latest

换句话说,File1 中不存在于 File2 中的每一行都应该是输出的一部分。

我已尝试执行以下操作,但没有成功。

diff File1.txt File2.txt

【问题讨论】:

  • 您应该过滤掉所有不以“-”开头的行。将管道输入grep '^\-' 以获取所需的所有行,并在前面加上减号。然后我认为您可以使用sed '/^-//' 删除该起始行。 (直到我找到更好的 sed 模式)

标签: linux bash shell loops sh


【解决方案1】:

你可以直接使用grep

$ grep -v -f file2.txt file1.txt
docker/registry:2.4.2
docker/rethinkdb:latest

如果文件中有很多行,我可能会使用@user000001 解决方案。

【讨论】:

  • 另请注意,您可能希望使用-F 以避免将file2.txt 中的每一行视为正则表达式。
【解决方案2】:

comm:

comm -23 <(sort File1.txt) <(sort File2.txt)

【讨论】:

    【解决方案3】:

    使用 awk 你可以做到:

    awk 'NR==FNR{a[$0];next}!($0 in a)' file2 file1
    

    【讨论】:

      猜你喜欢
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-14
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多