希望在两个不同的文本文件上执行内部联接。基本上我正在寻找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
答案 0 :(得分:6)
文件2最后是否应包含LUA
?
如果是,您仍然可以使用join
:
join -t'|' -12 <(sort -t'|' -k2 file1) file2
答案 1 :(得分:5)
这是一个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
构造,订单很重要。答案 2 :(得分:4)
您可以修改此脚本:
cat file2 | while read line; do
grep $line file1 # or whatever you want to do with the $line variable
done
while循环逐行读取file2并将该行赋予grep命令,该命令在file1中触及该行。可以使用grep选项删除一些额外的输出。
答案 3 :(得分:4)
看起来你只需要
grep -F -f file2 file1
答案 4 :(得分:0)
您可以使用粘贴命令来合并文件:
paste [option] source files [>destination file]
对于你的例子,它将是
paste file1.txt file2.txt >result.txt