内部连接两个文本文件
希望在两个不同的文本文件上执行内部连接。 基本上我正在寻找GNU连接程序的内部连接等价物。 这样的事情是否存在? 如果不是, awk
或sed
解决scheme将是最有帮助的,但我的第一个select将是一个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
不应该在最后包含LUA
?
如果是的话,你仍然可以使用join
:
join -t'|' -12 <(sort -t'|' -k2 file1) file2
你可以修改这个脚本:
cat file2 | while read line; do grep $line file1 # or whatever you want to do with the $line variable done
while循环逐行读取file2,并将该行指向grep命令,grep命令将file1中的那一行擦除。 有一些额外的输出,可能会删除与grep选项。
这里有一个awk选项,所以你可以避免bash依赖(为便携性):
$ awk -F'|' 'NR==FNR{check[$0];next} $2 in check' file2 file1
这个怎么用?
-
-F'|'
– 设置字段分隔符 -
'NR==FNR{check[$0];next}
– 如果总logging编号与文件logging编号相匹配(即我们正在读取提供的第一个文件),那么我们填充一个数组并继续。 -
$2 in check
– 如果在我们创build的数组中提到第二个字段,则打印该行(如果未提供任何操作,则为默认操作)。 -
file2 file1
– 文件。 订单是重要的,由于NR==FNR
构造。
看起来你只是需要
grep -F -f file2 file1
你可以使用粘贴命令来合并文件:
paste [option] source files [>destination file]
对于你的例子,这将是
paste file1.txt file2.txt >result.txt