bash сравнить два столбца с точным соответствием - PullRequest
0 голосов
/ 21 февраля 2020

Я сравниваю столбцы между двумя файлами для точного соответствия, но я получаю неточный результат. Пример следующим образом.

File1   File2
adam    sunny
jhon    adam
kelly   adam
matt    kevin
stuart  adam
Gary    Gary

Когда мы смотрим на файлы, есть только совпадение, т.е. Гарри. Мой вывод должен быть следующим.

Emptyline
Emptyline
Emptyline
Emptyline
Emptyline
Gary 

Для того, чтобы достичь требования. Я запускаю следующую команду

awk 'NR==FNR { n[$1]=$0;next } ($1 in n) { print n[$1],$2 }' file1 file2

и получаю вывод следующим образом

adam
adam
adam
Garry

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Вы должны отслеживать номера строк, а не только их содержимое:

$ awk 'NR==FNR { lines[NR]=$0; next }
       { if ($0 == lines[FNR]) print; else print "" }' file1.txt file2.txt





Gary
1 голос
/ 21 февраля 2020

1-е решение: С простым awk.

awk 'FNR==NR{a[FNR]=$0;next} a[FNR]==$0{print;next} {print ""}'  file1  file2

ИЛИ согласно комментарию сэра анубхавы:

awk 'FNR==NR{a[FNR]=$0;next} a[FNR]!=$0{$0=""} 1' file1  file2

Объяснение: Добавление подробного объяснения для вышеуказанного кода.

awk '              ##Starting awk program from here.
FNR==NR{           ##Checking condition FNR==NR which will be TRUE when first file Input_file1 is being read.
  a[FNR]=$0        ##Creating an array a with index FNR and value of current line here.
  next             ##next will skip all further statements from here.
}
a[FNR]==$0{        ##Checking condition if value of array a with FNR index and current line is equal then do following.
  print $0,a[FNR]  ##Printing current line and value array a with index FNR here.
}
'  file1  file2    ##Mentioning Input_file names here


2-е решение: Учитывая, что ваши фактические Input_file (s) имеют только 2 столбца в соответствии с показанными образцами, не могли бы вы попробовать затем выполнить следующее.

paste Input_file1  Input_file2 | awk '$1==$2{print $1};$1!=$2{print ""}'

Этот код будет печатать только те строки, значения которых равны в Input_file1 и Input_file2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...