希望在两个不同的文本文件上执行内部加入。基本上,我正在寻找相当于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
这是一个尴尬选项,因此您可以避免使用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
结构而很重要。
最终不应该包含 LUA
?
如果是,您仍然可以使用join
:
join -t'|' -12 <(sort -t'|' -k2 file1) file2
看起来您只需要
grep -F -f file2 file1
您可以修改此脚本:
cat file2 | while read line; do
grep $line file1 # or whatever you want to do with the $line variable
done
循环逐行读取File2,并将该行读取为File1中的GREP命令。有一些额外的输出可能会带有GREP选项。
您可以使用粘贴命令组合文件:
paste [option] source files [>destination file]
对于您的示例,它将是
paste file1.txt file2.txt >result.txt