Bash搜索配对

  • 本文关键字:搜索 Bash bash
  • 更新时间 :
  • 英文 :


我有两个文件,我想将它们配对并保存第一个文件的索引,如果它们匹配,则与第二个文件的相应索引一起保存。

例如:

文本文件1

a
b
c
d
e
d
e
c

文本文件2

c
e
e
d
b
a

输出

(1,6) (2,5) (3,1) (4,4) (5,3) (5,2) (6,4) (7,3) (7,2) (8,1)

我尝试使用 nl 对行进行编号,加入以加入对并排序以对进行排序,但我不明白。

使用 awk,将第二个文件读入数组并在读取第一个文件时遍历它以打印匹配项。

awk 'NR==FNR { a[$0,++n[$0]]=NR; next } ($0 in n) { for (i=1;i<=n[$0];i++) printf "(%d, %d)n",FNR,a[$0,i] }' file2 file1

您能否尝试以下操作。

awk '
FNR==NR{
a[$0,++b[$0]]=FNR
next
}
{
if(b[$0]>=++c[$0]){
if(b[$0]==1){
print "("FNR","a[$0,++d[$0]]")"
}
else{
for(i=1;i<=b[$0];i++){
print "("FNR","a[$0,i]")"
}
}
}
else{
c[$0]--
print "("FNR","a[$0,d[$0]]?a[$0,d[$0]]:0")"
}
}
'  Input_file2   Input_file1

输出将如下所示。

(1,6)
(2,5)
(3,1)
(4,4)
(5,2)
(5,3)
(6,4)
(7,2)
(7,3)
(8,1)

最新更新