awk Сравнить 2 файла, распечатать совпадение и разницу

Мне нужно объединить два файла f1.txt и f2.txt и получить совпадения и несоответствия, для этого случая я ищу совпадение первого поля в обоих файлах. И напечатайте сначала второе поле f2.txt, а затем напечатайте всю строку f1.txt. И если в f2.txt не найдено совпадений, укажите состояние "Не найдено", а затем напечатайте всю строку f1.txt.

F1.txt

1;2;3;4;5;6;7;8
1a;2;3;4;5;6;7;8
1b;2;3;4;5;6;7;8
2b;2;3;4;5;6;7;8

F2.txt

1;First
1a;Firsta
1b;Firstb

Желаемый результат:

First;1;1;2;3;4;5;6;7;8
Firsta;1a;1a;2;3;4;5;6;7;8
Firstb;1b;1b;2;3;4;5;6;7;8
Not Found;2b;2;3;4;5;6;7;8

Я могу получить совпадения, но не совпадение

awk -F ";" -v OFS="";"" "NR==FNR{a[$1]=$2;next}a[$1]{print a[$1],$0}" f2.txt f1.txt

Спасибо

2 ответа

Решение

Это должно сделать:

awk -F";" 'NR==FNR{a[$1]=$2;next}{if (a[$1])print a[$1],$0;else print "Not Found", $0;}' OFS=";" f2.txt f1.txt

Это было очень полезно. Я немного изменил, чтобы получить данные между 2 файлами и иметь только 1 столбец в каждом файле.

awk 'BEGIN { OFS=FS=";" } FNR==NR { array[$1]=$1; next } { print ($1 in array ? array[$1] : "Not Found"), $0 }' file1 file2
Другие вопросы по тегам