linux - 如何简单地在文件中保持最新记录
问题描述
我想在 Linux 上使用 bash 在给定文件 B 的文件 A 中简单地保持最新记录。
A 和 B 文件具有相同的结构。
文件的每一行都有一条记录,由公钥和注释组成,以空格分隔。注释是 user@hostname 的组合,在文件中是唯一的。
例子:
B file
xxxxxx user1@hostname1
yyyyyy user2@hostname2
wwwwww user3@hostname3
A file
yxxxxx user1@hostname1
zzzzzz user4@hostname4
yyyyyy user2@hostname2
这应该导致:
A file
xxxxx user1@hostname1
zzzzz user4@hostname4
yyyyy user2@hostname2
wwwww user3@hostname3
我知道我可以逐行读取 B 文件并通过注释检查文件 A 是否包含记录。如果不追加记录。如果是,请检查是否更新。然而,它在 bash 脚本中演化出多行代码。
可以做得更简单吗?
解决方案
一个小awk脚本
awk '
NR == FNR {print; seen[$2]; next}
!($2 in seen)
' A B
并将更改保存回文件 A,请选择以下之一
awk '...' A B | sponge A # from the `moreutils` package
tmp=$(mktemp)
awk '...' A B > "$tmp" && mv "$tmp" A
推荐阅读
- javascript - 在 Node JS 中使用英语以外的语言时未转义的字符?
- c++ - 检测数字中的重复数字
- r - 在保留以前的方法的同时覆盖 S3 通用方法 R
- pythonanywhere - 无法在任何地方的 python 上安装 Django 1.9.6
- python - 没有名为 RPI 的模块错误(即使已安装)
- javascript - Redux:为什么我们需要行动?
- python - 如何使用python脚本控制用python编写的可执行文件(.exe)?
- r - 在图例 R 中排列线条和框的问题
- arduino - 为什么 FastLED 不接受字符串作为字符串?
- python - Pandas 数据框条件均值