Как распечатать, если есть совпадение, и оставить, если нет с помощью awk

Чтобы устранить проблему, выполните следующие команды:

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif 


ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif


ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
1
02.11.2021, 07:46
1 ответ

Правильным подходом к обработке этих файлов будет декодирование A.tsvв словарь с ключом $1, сохранение содержимого всей строки и последующее использование его B.tsvдля поиска значений, т.е.

awk -v FS="\t" ' FNR == NR { arr[$1] = $0; next } 
  ( $1 in arr ){ print arr[$1]; next } { print $1 }' A.tsv B.tsv

Если вы хотите, чтобы окончательный результат был отсортирован по $1, вам может потребоваться проиндексировать содержимое обоих файлов и окончательно обработать его в END, распечатав только ключ, если значение отсутствует

awk -v FS="\t" ' FNR == NR { arr[$1] = $0; next } 
  !( $1 in arr ) { arr[$1] } END { for (x in arr) print arr[x] ? arr[x] : x }' A.tsv B.tsv
1
02.11.2021, 09:12

Теги

Похожие вопросы