匹配并粘贴到行

use*_*391 7 sed awk join

所以我有 2 个非常大的文本文件,由如下几行组成:

第一的:

Robert:Dillain:Other:Other:Other
Julian:Brude:Other:Other:Other
Megan:Flikk:Other:Other:Other
Samantha:Minot:Other:Other:Other
Jesus:Kimmel:Other:Other:Other
Run Code Online (Sandbox Code Playgroud)

第二:

Sb:Minot:amsen
Jbb:Kimmel:verlin
R:Dillain:bodent
Mb:Flikk:kentin
Jb:Brude:kemin
Run Code Online (Sandbox Code Playgroud)

我想通过第二列(Dillain、Brude 等)将它们匹配,并将它们粘贴到如下行中:

输出:

Robert:Dillain:Other:Other:Other:R:Dillain:bodent
Jesus:Kimmel:Other:Other:Other:Jbb:Kimmel:verlin
Samantha:Minot:Other:Other:Other:Sb:Minot:amsen
etc...
etc...
Run Code Online (Sandbox Code Playgroud)

我正在考虑sed为此使用,但任何基于 Unix 的东西都会很棒。我没有运气试图自己想出一种方法来做到这一点。

dev*_*ull 9

这听起来像是一个任务join

join -t":" -o "1.1,1.2,1.3,1.4,1.5,2.1,2.2,2.3" \
   -j 2 <(sort -k2,2 -t: test1) <(sort -k2,2 -t: test2)
Run Code Online (Sandbox Code Playgroud)

输出:

Julian:Brude:Other:Other:Other:Jb:Brude:kemin
Robert:Dillain:Other:Other:Other:R:Dillain:bodent
Megan:Flikk:Other:Other:Other:Mb:Flikk:kentin
Jesus:Kimmel:Other:Other:Other:Jbb:Kimmel:verlin
Samantha:Minot:Other:Other:Other:Sb:Minot:amsen
Run Code Online (Sandbox Code Playgroud)

分解:

  • -t 将字段分隔符设置为 :
  • -o 设置打印格式
  • -j 加入列号 2
  • <(sort -k2,2 -t: file)-k第二列对文件进行预排序,-t将字段分隔符设置为:


jim*_*mij 5

这是一个简单的任务awk

awk -F':' -vOFS=':' 'NR==FNR{a[$2]=$0;next}{print $0,a[$2]}' file2 file1
Run Code Online (Sandbox Code Playgroud)

首先,我们将:输入(with -F)和输出(with OFS)都设置为字段分隔符,然后如果处理了第一个文件(file2),我们将整行分配给以第二个字段索引的表元素。当处理下一个文件 ( file1) 时,我们打印它的行,添加存储在a[$2]) 中的前一个文件的行。