为了账号安全,请及时绑定邮箱和手机立即绑定

两个文本文件的内部连接

两个文本文件的内部连接

元芳怎么了 2019-07-08 13:02:30
两个文本文件的内部连接希望对两个不同的文本文件执行内部连接。基本上,我正在寻找与GNU连接程序相当的内部连接。这样的东西存在吗?如果没有,则awk或sed解决方案将非常有用,但我的第一选择是Linux命令。下面是我想要做的事情的一个例子档案1:0|Alien Registration Card LUA|Checklist Update1|Alien Registration Card LUA|Document App Plan2|Alien Registration Card LUA|SA Application Nbr3|Alien Registration Card LUA|tmp_preapp-DOB0|App - CSCE Certificate LUA|Admit Type1|App - CSCE Certificate LUA|Alias 12|App - CSCE Certificate LUA|Alias 23|App - CSCE Certificate LUA|Alias 34|App - CSCE Certificate LUA|Alias 4档案2:Alien Registration Card LUA结果:0|Alien Registration Card LUA|Checklist Update1|Alien Registration Card LUA|Document App Plan2|Alien Registration Card LUA|SA Application Nbr3|Alien Registration Card LUA|tmp_preapp-DOB
查看完整描述

3 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

文件2不应该包含LUA最后?

如果是,您仍然可以使用join:

join -t'|' -12 <(sort -t'|' -k2 file1) file2


查看完整回答
反对 回复 2019-07-08
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

下面是一个awk选项,因此您可以避免bash依赖项(可移植性):

$ awk -F'|' 'NR==FNR{check[$0];next} $2 in check' file2 file1

这是怎么回事?

  • -F'|'

    -设置字段分隔符
  • 'NR==FNR{check[$0];next}

    -如果总记录号与文件记录号匹配(即我们正在读取所提供的第一个文件),则填充一个数组并继续。
  • $2 in check

    -如果在我们创建的数组中提到了第二个字段,则打印行(如果不提供操作,这是默认操作)。
  • file2 file1

    -档案订单是重要的,因为

    NR==FNR

    构造。


查看完整回答
反对 回复 2019-07-08
?
白板的微信

TA贡献1883条经验 获得超3个赞

您可以修改此脚本:

cat file2 | while read line; do
    grep $line file1 # or whatever you want to do with the $line variabledone

而循环逐行读取文件2,并将该行交给grep命令,该命令在file 1中对该行进行处理。还有一些额外的输出,可能是用grep选项删除的。


查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 514 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信