猿问

两个文本文件的内部连接

两个文本文件的内部连接

希望对两个不同的文本文件执行内部连接。基本上,我正在寻找与GNU连接程序相当的内部连接。这样的东西存在吗?如果没有,则awk或sed解决方案将非常有用,但我的第一选择是Linux命令。


下面是我想要做的事情的一个例子


档案1:


0|Alien Registration Card LUA|Checklist Update

1|Alien Registration Card LUA|Document App Plan

2|Alien Registration Card LUA|SA Application Nbr

3|Alien Registration Card LUA|tmp_preapp-DOB

0|App - CSCE Certificate LUA|Admit Type

1|App - CSCE Certificate LUA|Alias 1

2|App - CSCE Certificate LUA|Alias 2

3|App - CSCE Certificate LUA|Alias 3

4|App - CSCE Certificate LUA|Alias 4

档案2:


Alien Registration Card LUA

结果:


0|Alien Registration Card LUA|Checklist Update

1|Alien Registration Card LUA|Document App Plan

2|Alien Registration Card LUA|SA Application Nbr

3|Alien Registration Card LUA|tmp_preapp-DOB


元芳怎么了
浏览 515回答 3
3回答

萧十郎

文件2不应该包含LUA最后?如果是,您仍然可以使用join:join&nbsp;-t'|'&nbsp;-12&nbsp;<(sort&nbsp;-t'|'&nbsp;-k2&nbsp;file1)&nbsp;file2

慕勒3428872

下面是一个awk选项,因此您可以避免bash依赖项(可移植性):$&nbsp;awk&nbsp;-F'|'&nbsp;'NR==FNR{check[$0];next}&nbsp;$2&nbsp;in&nbsp;check'&nbsp;file2&nbsp;file1这是怎么回事?-F'|'-设置字段分隔符'NR==FNR{check[$0];next}-如果总记录号与文件记录号匹配(即我们正在读取所提供的第一个文件),则填充一个数组并继续。$2 in check-如果在我们创建的数组中提到了第二个字段,则打印行(如果不提供操作,这是默认操作)。file2 file1-档案订单是重要的,因为NR==FNR构造。

白板的微信

您可以修改此脚本:cat&nbsp;file2&nbsp;|&nbsp;while&nbsp;read&nbsp;line;&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;grep&nbsp;$line&nbsp;file1&nbsp;#&nbsp;or&nbsp;whatever&nbsp;you&nbsp;want&nbsp;to&nbsp;do&nbsp;with&nbsp;the&nbsp;$line&nbsp;variabledone而循环逐行读取文件2,并将该行交给grep命令,该命令在file 1中对该行进行处理。还有一些额外的输出,可能是用grep选项删除的。
随时随地看视频慕课网APP
我要回答