[ awk ] ваш друг
awk 'NR==FNR{f[$1];next}{if($1 in f){next}else{print}}' A.txt B.txt
или более просто
awk 'NR==FNR{f[$1];next}!($1 in f){print}' A.txt B.txt
или даже более просто
awk 'NR==FNR{f[$1];next}!($1 in f)' A.txt B.txt
Немного объяснение гр ertainly помочь
NR
& FNR
являются AWK встроенными переменными, которые стоят за total number of records - including current - processed so far
иtotal number of records - including current - processed so far in the current file
соответственно и они будут равны только для первого обработанного файла.
10 сначала создает массив f
, а затем добавляет $1
в качестве ключа, если тот же ключ еще не существует. Если значение не присвоено, тогда f [$ 1] автоматически инициализируется до нуля, но этот аспект не используется в вашем случае
next
переходит к следующей записи без обработки остальной части awk-скрипта.
- Обратите внимание, что часть
{if($1 in f){next}else{print}}
будет обрабатываться только для второго (и последующего, если есть) файла/с.
$1 in f
проверяет, является ли ключ $1
существует в массиве f
if-else-print
часть само за себя.
- Замечание в третьей версии,
{print}
опущено, по умолчанию действие по умолчанию для awk - это печать!
или более просто 'AWK«NR == FNR { f [$ 1]; next}! ($ 1 in f) '' – 123
@ 123: Держу пари, что ты в этом хорош. :) Спасибо, добавь его в решение – sjsam