2016-06-09 1 views
0

у меня есть два файла предположим 1st.datСравнение двух файлов и печати только несовпадающие значения UNIX

a 
b 
c 
d 

и другой файл sppose 2nd.dat

d 
e 
f 
g 

мой вывод должен быть как

a 
b 
c 
e 
f 
g 

Я пробовал использовать diff и sdiff, но я не получаю вывод, как я уже упоминал. Пожалуйста, помогите

ответ

1

Вы можете использовать Grep

grep -vf 2nd.dat 1st.dat > out.dat && grep -vf 1st.dat 2nd.dat >> out.dat 
0

diff попробовать, как это: -

diff 1st.dat 2nd.dat|grep -e '<' -e '>'|sed -e 's/< \+//g' -e 's/> \+//g' > output.txt 

кошка output.txt

a 
b 
c 
e 
f 
g 
0

Я думаю, что ваша версия uniq не поддерживает опцию --unique. не может причинить вред попробовать:

cat 1st.dat 2nd.dat | sort | uniq --unique 

Это было бы гораздо проще, чем

cat 1st.dat 2nd.dat |grep -vf <(sort 1st.dat 2nd.dat | uniq -d) 

Решение с grep -vf потребуется еще некоторое внимание (соответствие подстроки, пустые строки). Когда вы идете на grep -vf, решение @ Daniel легче понять и изменить, и Дэниел не использует медленный вид.

0

Вы можете использовать команду comm в linux, например, comm -3 1st.dat 2nd.dat.
Он даст вам желаемый результат.

0

diff -c file1 file2 | grep '^- \|^+ ' | tr '+' ' ' | tr '-' ' '

файл 1:

a 
b 
c 
d 

файл 2:

d 
e 
f 
g 

выход

a 
    b 
    c 
    e 
    f 
    g