UNIX, сравните 1-е поле File3 с 1-м полем Файла 2

Предположим, что у меня есть три входных файла как показано ниже:

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 
1
задан 24 August 2018 в 00:52

1 ответ

Использование 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  
0
ответ дан 7 December 2019 в 23:38

Другие вопросы по тегам:

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