如何在 Linux 中进行单向差异?

     2023-02-23     241

关键词:

【中文标题】如何在 Linux 中进行单向差异?【英文标题】:How do I do a one way diff in Linux? 【发布时间】:2014-08-14 22:04:52 【问题描述】:

如何在 Linux 中进行单向比较?

差异的正常行为:

通常,diff 会告诉您两个文件之间的所有差异。例如,它会告诉您文件 A 中不在文件 B 中的所有内容,还会告诉您文件 B 中但不在文件 A 中的所有内容。例如:

文件 A 包含:

cat
good dog
one
two

文件 B 包含:

cat
some garbage
one
a whole bunch of garbage
something I don't want to know

如果我按如下方式进行常规比较:

差异 A B

输出将类似于:

2c2
< good dog
---
> some garbage
4c4,5
< two
---
> a whole bunch of garbage
> something I don't want to know

我在寻找什么:

我想要的只是第一部分,例如,我想知道文件 A 中的所有内容,而不是文件 B。但是,我希望它忽略文件 B 中的所有内容,而不是文件 A 中的所有内容.

我想要的是命令或一系列命令:

????甲乙

产生输出:

2c2
< good dog
4c4,5
< two

我相信可以通过将 diff 的输出通过管道传输到 sed 或 awk 来实现解决方案,但我对这些工具不够熟悉,无法提出解决方案。我基本上想删除所有以 --- 和 > 开头的行。

编辑:我编辑了示例以说明一行中的多个单词。

注意:这是Determine list of non-OS packages installed on a RedHat Linux machine的“子问题”

注意:这与此处提出的问题相似但不同(例如,不是骗子): One-way diff file

【问题讨论】:

这感觉像是一个超级用户的问题。 【参考方案1】:

如果您的文件仅由单行实体组成,并且输出顺序无关紧要(措辞不清楚),另一种选择是:

comm -23 <(sort A) <(sort B)

comm 要求对其输入进行排序,-2 的意思是“不要向我显示第二个文件独有的行”,而 -3 的意思是“不要向我显示那些这两个文件是通用的”。

如果您需要按照它们出现的顺序显示“差异”,那么上面的diff/awk 解决方案是可以的(尽管grep 位并不是真正必要的——它可能是@ 987654328@.

编辑:修复了要报告的行集 - 我最初是倒着读的...

【讨论】:

【参考方案2】:

diff A B|grep '^&lt;'|awk 'print $2'

grep '^&lt;' 表示选择行以 开头

awk 'print $2' 表示选择第二列

【讨论】:

非常感谢,这让我走上了正轨。 print $2 的问题在于它忽略了以后出现的任何单词(例如,如果我将“好狗”放在文件 A 与狗中。事实证明,该命令的第一部分实现了我想要的,例如以下命令: 差异 AB | grep '^ @Jonathan 试试这个:diff A B|grep '^ 【参考方案3】:

如 cmets 所述,一个最正确的答案是

diff A B | grep '^<'

虽然这会给出输出

< good dog
< two

而不是

2c2
< good dog
4c4,5
< two

【讨论】:

【参考方案4】:

如果您还想查看有问题的文件,如果文件夹不同,您可以使用

diff public_html temp_public_html/ | grep '^[^>]'

匹配除以 >

开头的所有行

【讨论】:

linux对比两个文件的差异(代码片段)

在项目维护阶段,经常会对垃圾文件进行清理。比如没有在数据库中的文件进行删除,这个时候最好的选择就是使用shell命令了;废话不多说直接上代码:1.首先准备好从数据表导出来的数据,方法随意2.在服务器查看指定目录下... 查看详情

如果行之间的差异超过 1 分钟,如何对数据进行分组

】如果行之间的差异超过1分钟,如何对数据进行分组【英文标题】:Howtogroupdataifdifferencebetweenrowsismothethan1minute【发布时间】:2020-09-1722:33:12【问题描述】:我正在尝试在SQL上创建一个包含汇总数据的新表。例如。在原始表中,... 查看详情

如何在淘汰赛中使用单向绑定

】如何在淘汰赛中使用单向绑定【英文标题】:Howtouseaonewaybindinginknockout【发布时间】:2013-09-1317:12:54【问题描述】:我有一个这样的视图模型:varviewModel=firstName:\'Fred\'还有一个像这样绑定到它的文本框<inputdata-bind="value:firstNa... 查看详情

linux学习系列--如何在linux中进行文件的管理

...能了解到的文件管理系统是分为多个文件夹进行管理的。如何查看文件路径pwd,在文件目录中,会有一个点(.)代表的是当前目录,两个点(..)代表的是当前目录的上层目录在Linux下,所有以点开始的文件都是“隐藏文件”,对... 查看详情

sysdate 差异(如何在 sysdate 和我的表日期之间进行查询)

】sysdate差异(如何在sysdate和我的表日期之间进行查询)【英文标题】:sysdatedifference(howtomakequerybetweensysdateandmytabledate)【发布时间】:2015-12-1913:39:46【问题描述】:我是Oracle新手。我有一些问题要查询。我正在尝试进行查询以解... 查看详情

在linux中使用mktime函数的时间差异

】在linux中使用mktime函数的时间差异【英文标题】:DifferenceinTimeUsingmktimefunctioninlinux【发布时间】:2013-10-2423:37:41【问题描述】:假设我有2个不同的输入时间。Time-1是2013-10-01-00-00-00,Time-2是2000-01-01-12-00-00。我已将上述两次填充... 查看详情

如何在 JPA 中定义单向 OneToMany 关系

】如何在JPA中定义单向OneToMany关系【英文标题】:HowtodefineunidirectionalOneToManyrelationshipinJPA【发布时间】:2012-08-1519:49:06【问题描述】:JPA中的实体映射存在以下问题。我有两个实体,第一个是查找,第二个是代表实体翻译的文本... 查看详情

如何避免在一对多单向关联中插入和更新查询

】如何避免在一对多单向关联中插入和更新查询【英文标题】:Howtoavoidinsertandupdatequeriesinone-to-manyuni-directionalassociation【发布时间】:2016-02-1407:23:01【问题描述】:我在Employee和Phone实体之间有一个简单的one-to-many关系。我这里有2... 查看详情

如何在 AngularJS 中进行双向过滤?

】如何在AngularJS中进行双向过滤?【英文标题】:Howtodotwo-wayfilteringinAngularJS?【发布时间】:2012-07-2122:20:51【问题描述】:AngularJS可以做的一件有趣的事情是将过滤器应用于特定的数据绑定表达式,这是一种方便的应用方式,例... 查看详情

使用 Python 多处理进行通信的 OSX 和 Linux 之间的性能差异

】使用Python多处理进行通信的OSX和Linux之间的性能差异【英文标题】:PerformancediscrepancybetweenOSXandLinuxforcommunicationusingPythonmultiprocessing【发布时间】:2018-06-0207:33:02【问题描述】:我一直在尝试更多地了解Python的multiprocessing模块,... 查看详情

如何在 Symfony2 中单向持久化一对一实体

】如何在Symfony2中单向持久化一对一实体【英文标题】:HowpersistonetooneentityunidirectionallyinSymfony2【发布时间】:2014-06-2912:43:24【问题描述】:我在Symfony2中使用Doctrine的两个实体有问题:这是第一个实体:/***Pedidos**@ORM\\Table()*@ORM\\E... 查看详情

MySQL:如何在几秒钟内获得两个时间戳之间的差异

】MySQL:如何在几秒钟内获得两个时间戳之间的差异【英文标题】:MySQL:howtogetthedifferencebetweentwotimestampsinseconds【发布时间】:2011-04-0111:45:25【问题描述】:有没有一种方法可以在MySQL中进行查询,以秒为单位提供两个时间戳之间... 查看详情

如何在 Linux 中使用 C 进行 UDP 广播?

】如何在Linux中使用C进行UDP广播?【英文标题】:HowtoUDPBroadcastwithCinLinux?【发布时间】:2010-09-2503:27:40【问题描述】:【问题讨论】:以编程方式,还是通过实用程序/工具?【参考方案1】:通常使用伯克利套接字API,将sendto()... 查看详情

无论如何要在 Eclipse 中使用带有 EGit 的外部差异编辑器?

】无论如何要在Eclipse中使用带有EGit的外部差异编辑器?【英文标题】:AnywaytouseanexternaldiffeditorinEclipsewithEGit?【发布时间】:2013-08-2002:47:58【问题描述】:在进行差异/合并时,是否可以将Eclipse/EGit配置为使用外部差异编辑器和... 查看详情

如何在 Grafana 中查找内存使用差异

】如何在Grafana中查找内存使用差异【英文标题】:HowtofindmemoryusagedifferenceinGrafana【发布时间】:2021-02-0909:50:42【问题描述】:我在grafana的图形面板中工作,并使用弹性搜索作为数据源。在数据源中,我使用了带有时间戳的内存... 查看详情

在linux中sort命令如何对指定列进行排序

请教在linux系统中假设文件有5列,我想按照第3列排序应该怎么使用sort命令呢?参考技术Asort-k3yourfile.txt这种问题查看手册是最方便了.你在命令行下运行mansort看看它的帮助,很详细.本回答被提问者采纳 查看详情

如何在 Vimdiff 中展开/折叠差异部分?

】如何在Vimdiff中展开/折叠差异部分?【英文标题】:HowcanIexpand/collapseadiffsectionsinVimdiff?【发布时间】:2011-07-1410:01:10【问题描述】:我今天开始使用vimdiff,并且想做一些我在基于Windows的差异编辑器上认为理所当然的事情(例... 查看详情

如何在 VBA 中查找日期之间的差异

】如何在VBA中查找日期之间的差异【英文标题】:HowtofindthedifferencebetweendatesinVBA【发布时间】:2012-01-0312:04:23【问题描述】:我试图找出系统日期和工作表中存储的日期之间的差异。如果它们之间的差异>30天,则结果为真,否... 查看详情