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

bash – 查找两个文件之间的公共行以及它们的行号

发布时间:2020-12-15 22:57:31 所属栏目:安全 来源:网络整理
导读:我想找到两个文件(大文件)之间的公共线,一个有9000万行,1个有100万个,还有它们的行号. comm -12 file1 file2 给了我公共线,但我想知道各个文件中的行号 解决方法 这个解决方案适用于我的小测试文件 – 我不确定它将如何在一个拥有9000万行的文件上执行. tab=
我想找到两个文件(大文件)之间的公共线,一个有9000万行,1个有100万个,还有它们的行号.

comm -12 file1 file2

给了我公共线,但我想知道各个文件中的行号

解决方法

这个解决方案适用于我的小测试文件 – 我不确定它将如何在一个拥有9000万行的文件上执行.

tab=` printf 't' `
join -t"$tab" -j2 <( cat -n file1 ) <( cat -n file2 )

这是有效的,因为cat -n在每行前面加上一个空格填充的数字后跟一个制表符.然后,连接找到公共线,仅查看第一个选项卡后的内容.

连接完成后,您应该看到公共行,每行后跟两个数字.第一个数字是file1的行号,第二个是file2的行号.

警告:如果文件中没有制表符,这将有效.如果不是这种情况,您可以使用sed将第一个标签转换为“安全”字符.

safe="|"
join -t"$safe" -j2 
  <( cat -n file1 | sed -e "s:t:$safe:" ) 
  <( cat -n file2 | sed -e "s:t:$safe:" )

此外,根据连接的实现方式,您可能希望在第一个进程替换中列出较小的文件,在第二个进程替换中列出较大的文件.这样,较小的文件可以全部适合存储器,并且可以扫描较大的文件并有效地选择匹配的行.我不知道是不是这样,但它可能值得一试.

(编辑:李大同)

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

    推荐文章
      热点阅读