Если вам так нравится awk
awk '
FILENAME != ARGV[3] {
m[$2,$3] = 1
next
}
!(($2,$3) in m)
' file3.txt file2.txt file1.txt > out.txt
, так как для меня намного легко
cut -d" " -f 2,3 file2.txt file3.txt | grep -v -f - file1.txt > out.txt
Возможное решение с awk
:
awk 'FILENAME == ARGV[1] {
m[$2,$3] = $0;
next;
}
FILENAME == ARGV[2] {
if (!(($2,$3) in m)) {
m[$2,$3] = $0;
}
next;
}
{
if (!(($2,$3) in m)) {
print $0 >"out.txt";
}
}' file3.txt file2.txt file1.txt
Сначала мы прочитаем первый файл и создайте массив с Keys Column 2 и 3.
Затем мы читаем второй файл, и мы проверяем, существует ли ключ от столбца 2 и 3 в первом массиве, если он не существует, мы добавляем его в массив.
Наконец, мы прочитаем первый файл, проверьте существующую клавишу в массиве, и если он не существует, это линию, которую мы заинтересованы.
out.txt должен содержать строку в первом файле, который не представлен В других двух файлах:
abd 2 b f12 f14 f13