比较两个文件并仅打印不匹配的值UNIX

时间:2016-06-09 10:13:57

标签: unix ksh

我有两个文件假设是1st.dat

a
b
c
d

和另一个文件sppose 2nd.dat

d
e
f
g

我的输出应该像

a
b
c
e
f
g

我尝试过使用diff和sdiff,但是我没有按照我提到的那样获得输出。请帮忙

5 个答案:

答案 0 :(得分:1)

您可以使用grep

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

答案 1 :(得分:0)

尝试diff,如下所示: -

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

cat output.txt

a
b
c
e
f
g

答案 2 :(得分: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时,@ Tangiel的解决方案更容易理解和修改,但丹尼尔并没有使用慢速排序。

答案 3 :(得分:0)

您可以在linux中使用dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:support-v13:26.1.0' compile 'com.android.support:recyclerview-v7:26.1.0' compile 'com.google.android.gms:play-services-ads:11.4.2' compile 'com.google.android.gms:play-services-location:11.4.2' compile 'com.google.android.gms:play-services-gcm:11.4.2' compile('com.vungle:publisher-sdk-android:5.3.0@aar') { transitive=true } compile 'com.google.ads.mediation:vungle:5.3.0.0' compile 'com.inmobi.monetization:inmobi-ads:6.2.0' compile 'com.google.ads.mediation:inmobi:6.2.0.0' } 命令,例如comm 它会为您提供所需的输出。

答案 4 :(得分:0)

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

文件1:

a
b
c
d

文件2:

d
e
f
g

输出

  a
  b
  c
  e
  f
  g