Сравните указанный столбец c из разных файлов и выведите один, который не соответствует - PullRequest
0 голосов
/ 02 февраля 2020

Сравнивая столбец 4 в file1 с colunan 5 в file2, он хочет напечатать те, которые не совпадают (нужно печатать только значения в сравниваемых столбцах).

file1

111 435 123 aaaa    
111 435 123 bbbb    
111 435 123 cccc    
111 435 123 dddd    
111 435 123 adas  

file2

dff 233 444 asd aaaa
dff 233 444 asd bbbb
dff 233 444 asd cccx
dff 233 444 asd ddda
dff 233 444 asd adas

желаемый вывод

cccc cccx
dddd ddda

Используя этот код, я получил желаемый вывод

paste file file2 | awk '{ if($1 != $2)  print }' 

Как я могу исправить приведенный ниже код, чтобы получить точно желаемый результат

awk 'NR==FNR{a[$1]; next} !(($1) in a)' file1 file2

Заранее спасибо ..

Ответы [ 2 ]

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

Я бы пошел с решением paste | awk, которое у вас уже было, но так как вы специально попросили чистую версию awk:

$ awk 'NR==FNR{a[NR]=$4; next} $5 != a[FNR]{print a[FNR], $5}' file1 file2
cccc cccx
dddd ddda
1 голос
/ 02 февраля 2020

РЕДАКТИРОВАТЬ: Согласно измененному вводу OP добавление следующего решения.

awk '
FNR==NR{
  a[$NF]=$NF
  next
}
($NF in a){
  delete a[$NF]
  next
}
{
  print $NF
}
END{
  for(i in a){
    print i
  }
}
' file1 file2 | paste -sd' '


Не могли бы вы попробовать следующее (написано и проверено с показанными образцами).

awk '
FNR==NR{
  a[$0]=$0
  next
}
($0 in a){
  delete a[$0]
  next
}
1
END{
  for(i in a){
    print i
  }
}
' file1 file2 | paste -sd' '
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...