2014-12-24 4 views
2

Хотел сравнить первое поле ($ 1) из f11.txt и f22.txt с первым полем ($ 1) из f33.txt затем распечатать non-matching line items from f33.txtAWK для сравнения более двух файлов

f11.txt

a,b 
c,d 

f22.txt

a,b 
x,x 

f33.txt

a,b 
z,z 

Пытались ниже команды и в-полной

awk ' BEGIN {FS = OFS = ","} FNR==NR {a[$1] = $0; next} !($1 in a) {print $0}' f11.txt f22.txt f33.txt 

Ожидаемый результат от f33.txt:

z,z 

Хотела сравнить первое поле ($ 1) из f11.txt, f22.txt, F33 .txt с первым полем ($ 1) f44.txt затем распечатать non-matching line items from f44.txt

где f44.txt

m,n 
x,y 
b,a 

Пытались ниже команды и в-полной

awk ' BEGIN {FS = OFS = ","} FNR==NR {a[$1] = $0; next} !($1 in a) {print $0}' f11.txt f22.txt f33.txt f44.txt 

Ожидаемое Выход из f44.txt:

m,n 
b,a 

В поисках ваших предложений !!

+0

nash_ag, приведенная выше ссылка для сравнения двух файлов Только, так что мой вопрос не дублируется ... – VNA

+0

Можете ли вы начать (в первом случае) с 'cat f11 f22> f11_22', а затем использовать технику для сравнения двух файлов ? – jas

+0

Сравнение нескольких файлов и столбцов с использованием awk-ссылки не похоже на предыдущий вопрос ... – VNA

ответ

4

Вот 2 варианта:

  1. чтения f33.txt первых, хранить строки, и для каждого из последующих файлов удалить хранятся строки

    awk -F, ' 
        NR==FNR {f33[$1]=$0; next} 
        $1 in f33 {delete f33[$1]} 
        END {for (key in f33) print f33[key]} 
    ' f33.txt f11.txt f22.txt 
    
  2. изучить текущий файл с последним именем файла в аргументах

    awk -F, ' 
        FILENAME != ARGV[ARGC-1] {keys[$1]; next} 
        !($1 in keys) 
    ' f11.txt f22.txt f33.txt 
    
+0

Спасибо большое Гленн Джекман за вашу хорошую поддержку, его работая отлично, я принял ответ и поддержал !!! – VNA