Сравните два файла и добавьте значения, оставьте несоответствия как таковые в выходном файле.
Я пытаюсь сопоставить два файла,file1.txt(50000 строк), file2.txt(55 000 строк). Я хочу добавить файл2 в файл 1, извлечь значения столбцов 2 и 3 и оставить несоответствия как таковые. Выходной файл должен содержать все идентификаторы из file2, т.е. он должен иметь 55000 строк. Примечание. Все идентификаторы в файле 1 отсутствуют в файле file2. т.е. фактические совпадения могут быть менее 50000.
file1.txt
ab1 12 345
ab2 9 456
gh67 6 987
file2.txt
ab2 0 0
ab1 0 345
nh7 0 0
gh67 6 987
Выход
ab2 9 456
ab1 12 345
nh7 0 0
gh67 6 987
Это то, что я пробовал, но он печатает только совпадения (поэтому вместо 55 000 строк у меня есть 49 000 строк в моем выходном файле)
awk "NR==FNR {f[$1]=$0;next}$1 in f{print f[$1],$0}" file1.txt file2.txt >output.txt
1 ответ
Решение
Этот скрипт будет работать
NR == FNR {
a[$1] = $0
next
}
$1 in a {
split(a[$1], b)
print $1, (b[2] == $2 ? $2 : b[2]), (b[3] == $3 ? $3 : b[3])
}
!($1 in a)
Если вы сохраните это как a.awk и запустите
awk -f a.awk foo.txt foo1.txt
Это будет выводить
ab2 9 456
ab1 12 345
nh7 0 0
gh67 6 987