Баш ищет пар - PullRequest
       6

Баш ищет пар

0 голосов
/ 21 октября 2019

У меня есть два файла, которые я хочу объединить и сохранить индекс первого файла с соответствующим индексом во втором файле, если они совпадают.

Например:

Textfile1

a
b
c
d
e
d
e
c

Textfile2

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для нумерации строк, объединение для объединения в пары и сортировки для сортировки пар, но я не понимаю.

Ответы [ 2 ]

1 голос
/ 21 октября 2019

С помощью 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
0 голосов
/ 21 октября 2019

Не могли бы вы попробовать следующее.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...