2016-03-20 3 views
0

У меня есть два файла в заданном формате:печати недостающие слова и имя файла - Linux

Файл 1:

India 215.0 
country 165.0 
Indian 163.0 
s 133.0 
Maoist 103.0 
Nepal 89.0 
group 85.0 
Kathmandu 85.0 

Файл 2:

Nepal 89.0 
would 88.0 
Kathmandu 85.0 
rule 82.0 
king 80.0 
parliament 79.0 
card 79.0 

Я хочу напечатать слова, которые присутствуют в одном файле, но не в другом. Файл, в котором находится каждое слово, также должен быть напечатан рядом со словом. Например, я хочу выход быть:

India 215.0, file 1 
country 165.0, file 1 
group 85.0, file 1 
.... 
.... 
would 88.0, file 2 

Я попытался с помощью:

grep -v file1 file2 

Я получаю слова, которые не присутствуют в file2, но я хочу, чтобы слова, которые присутствуют в file1 и а не file2 и наоборот, с их соответствующими именами файлов. Как я могу это достичь? Пожалуйста помоги! разделитель полей

ответ

1
# print out all the rows only in file2 and append filename 
$ awk 'NR==FNR{a[$1]++;next} !($1 in a){print $0, FILENAME}' file1 file2                             
would 88.0 file2 
rule 82.0 file2 
king 80.0 file2 
parliament 79.0 file2 
card 79.0 file2 

# print all the rows only in file1 and append filename 
$ awk 'NR==FNR{a[$1]++;next} !($1 in a){print $0, FILENAME}' file2 file1                             
India 215.0 file1 
country 165.0 file1 
Indian 163.0 file1 
s 133.0 file1 
Maoist 103.0 file1 
group 85.0 file1 

по умолчанию является пространство, $1 первый столбец.