加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 在两个文件中计算相等的行数

发布时间:2020-12-15 18:23:17 所属栏目:安全 来源:网络整理
导读:说,我有两个文件,想知道他们有多少相等的行.例如,file1是 13245010 和file2包含 31056415 在这种情况下,答案应该是3(公共线是’3′,’10’和’5′). 当然,这可以通过python完成,例如,但我很好奇从bash(使用一些标准工具或awk或其他任何东西)这样做.这就是我
说,我有两个文件,想知道他们有多少相等的行.例如,file1是
1
3
2
4
5
0
10

和file2包含

3
10
5
64
15

在这种情况下,答案应该是3(公共线是’3′,’10’和’5′).

当然,这可以通过python完成,例如,但我很好奇从bash(使用一些标准工具或awk或其他任何东西)这样做.这就是我提出的:

cat file1 file2 | sort | uniq -c | awk '{if ($1 > 1) {$1=""; print $0}}' | wc -l

这对任务来说似乎太复杂了,所以我想知道是否有更简单或更优雅的方法来实现相同的结果.

附:将公共部分的百分比输出到每个文件中的行数也很不错,但这不是必需的.

UPD:文件没有重复的行

要使用awk查找与2个文件共同的行:
awk 'a[$0]++' file1 file2

将输出3 10 15

现在,只需将其传递给wc以获取公共线的数量:

awk 'a[$0]++' file1 file2 | wc -l

将输出3.

说明:

这里的工作类似于默认值为0的字典.当你写一个[$0]时,你会在[$0]中加1,但是这个指令返回一个[$0]的前一个值(见difference between a++ and ++a).所以你第一次遇到某个字符串时会有0(= false),下次会遇到1(或更多,仍然=真).

默认情况下,awk’condition’文件是输出条件为true的所有行的语法.

还要注意每次遇到新密钥时a []数组都会扩展.在脚本结束时,数组的大小将是您在所有输入文件中拥有的唯一值的数量(在OP的示例中,它将是9).

注意:此解决方案计算重复项,即如果您有:

file1 | file2
1     | 3
2     | 3
3     | 3

awk’一个[$0]’file1 file2将输出3 3 3并且awk’一个[$0]’file1 file2 | wc -l将输出3

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读