2015-06-30 3 views
0

Это мои исходные значения в файле с именем file.txt:Shell сравнивающие файлы

us-east-1a m1.small 1 
us-east-1c m1.small 1 
us-east-1c m3.medium 1 
us-east-1c m3.medium 1 
us-east-1c t1.micro 1 
us-east-1d m1.large 1 
us-east-1d m1.medium 1 
us-east-1e m3.medium 6 

Это новый файл, созданный file2.txt:

us-east-1a c3.large 1 
us-east-1a m1.small 7 
us-east-1a m3.medium 6 
us-east-1c m1.small 1 
us-east-1c m3.medium 6 
us-east-1c t1.micro 1 
us-east-1d m1.large 1 
us-east-1d m1.medium 1 
us-east-1d m3.large 1 
us-east-1d t2.medium 1 
us-east-1e m3.medium 23 

Я рефрейминг мой желаемый результат. Могу ли я получить точный результат, как показано ниже.

us-east-1a c3.large 1 
us-east-1a m3.medium 6 
us-east-1d m3.large 1 
us-east-1d t2.medium 1 
+2

Да, это возможно. – Martin

+0

Эй, спасибо за мартин, вы могли бы помочь мне с образцом сценария. – user3415790

+0

Я пробовал использовать temp = 0; в то время как линия чтения делают эхо $ линии> temp1.txt во время чтения line2 сделать эхо $ line2> temp2.txt дифф temp1.txt temp2.txt> temp3.txt сравнить = 'кошка temp3.txt | wc -l | head -1' if ["$ compare" -eq 0]; затем temp = 1; fi done <файл2.txt if ["$ temp" -eq 1]; затем cat $ line2 fi done user3415790

ответ

1

Если я правильно понял, вы хотите, первые два поля по сравнению и, если они отличаются линии должны быть напечатаны:

awk 'FNR==NR{a[$1$2];next}!($1$2 in a)' file.txt file2.txt 

Первый файл file.txt считывается в массив. И когда второй файл обрабатывается, содержимое массива сравнивается.

+0

Thanks Chaos. Это то, что я ожидал – user3415790

Смежные вопросы