内部加入两个文本文件



希望在两个不同的文本文件上执行内部加入。基本上,我正在寻找相当于GNU加入程序的内部加入。这样的事情存在吗?如果不是,则awksed解决方案将最有用,但我的首选是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

相关内容

  • 没有找到相关文章

最新更新