Предположим, что у меня есть три входных файла как показано ниже:
File 1
1001 1 2 3
1002 4 5 6
1003 7 8 9
1004 10 11 12
File 2
1001 11 22 33
1002 44 55 66
1004 100 111 122
File 3
1001 111 222 333
1004 130 141 152
Я хотел бы сравнить первое поле File3 с первым полем Файла 2. Если конкретное первое поле в Файле 2 не существует в Файле 3, то я хочу удалить ту всю строку в Файле 2.
Например, первое поле на строке 2 из Файла 2 (=1002) не существует в Файле 3. Следовательно я хочу удалить эту строку в Файле 2 и сохранить его.
Теперь я хочу сравнить Файл 3 и Файл 1. Мы видим, что первое поле второй строки (=1002) и первое поле третьей строки (=1003) из Файла 1 не существуют в Файле 3.
Я хочу удалить эти две строки из Файла 1 и сохранить его.
После вышеупомянутых шагов эти три файла закончились бы как следующее:
File 1
1001 1 2 3
1004 10 11 12
File 2
1001 11 22 33
1004 100 111 122
File 3
1001 111 222 333
1004 130 141 152
Использование Awk:
awk 'NR==FNR {a[$1]++; next} $1 in a {print > FILENAME ".tmp"}' File3 File2 File1
, а затем
mv File1.tmp File1
mv File2.tmp File2
Если у вас достаточно свежая версия GNU Awk (он же gawk
), то вы можете просто сделать :
awk -i inplace 'NR==FNR {a[$1]++} !($1 in a) {next} 1' File3 File2 File1
Пр.
$ awk -i inplace 'NR==FNR {a[$1]++} !($1 in a) {next} 1' File3 File2 File1
$ head File{1..3}
==> File1 <==
1001 1 2 3
1004 10 11 12
==> File2 <==
1001 11 22 33
1004 100 111 122
==> File3 <==
1001 111 222 333
1004 130 141 152