linux - 如何获得linux中两个文件之间的差异(仅添加)

我有两个文件 A1 和 A2(未排序)。 A1 是 A2 的早期版本,并且在 A2 中添加了一些行。如何获取添加到 A2 的新行?

注意:我只想添加新行,而不想要 A1 中但在 A2 中删除的行。当我执行 diff A1 A2 时,我得到了添加和删除,但我只想要添加。

请提出一种方法来做到这一点。

最佳答案

以下大部分内容直接复制自@TomOnTime 的服务器故障答案 here .底部是对未排序文件的尝试,但该命令在给出差异之前对文件进行排序,因此在许多情况下它不会是所需的。对于未排序文件的格式良好的差异,您可能会发现其他答案更有用(感谢@Fritz 指出这一点):

显示仅存在于文件 a 中的行:(即从 a 中删除的内容)

comm -23 a b

显示仅存在于文件 b 中的行:(即添加到 b 中的内容)

comm -13 a b

显示只存在于一个文件或另一个文件中的行:(但不能同时存在)

comm -3 a b | sed 's/^\t//'

(警告:如果文件 a 有以 TAB 开头的行,它(第一个 TAB)将从输出中删除。)

注意:两个文件都需要排序,“comm”才能正常工作。如果它们尚未排序,您应该对它们进行排序:

sort <a >a.sorted
sort <b >b.sorted
comm -12 a.sorted b.sorted

如果文件非常长,这可能是一个很大的负担,因为它需要额外的副本,因此需要两倍的磁盘空间。

编辑:请注意,可以使用进程替换更简洁地编写命令(感谢@phk 的评论):

comm -12 <(sort < a) <(sort < b)

https://stackoverflow.com/questions/15384818/

相关文章:

php - 使用 WGET 运行 cronjob PHP

linux - 如何自动化 HTML 到 PDF 的转换?

linux - 远程 Linux 服务器到远程 linux 服务器目录复制。如何?

linux - curl 用于获取标题

linux - 如何运行 nohup 并将其 pid 文件写入单个 bash 语句

linux - 如何将一个文本文件拆分为多个 *.txt 文件?

python - standard_init_linux.go :178: exec user pr

linux - 如何从 linux 命令行获取视频文件的分辨率(宽度和高度)?

linux - 在 mac 上通过 ssh 连接到 amazon aws linux 服务器

linux - 在 Unix 上计算每行/字段的字符出现次数