2014-01-17 6 views
5

は私が B.TXTどの行別のファイルに不足しているLinuxボックス 上

1 
2 
3 
6 
以下のよう A.TXT

1 
2 
3 
4 

セカンドファイル以下のように一つのファイルを持っているどのように見つけますか

A.txt内にあるものは知りたいが、B.txtではなく であることを知りたい。すなわち、値4を印刷する必要がある

私はLinuxでそれをしたいと思います。 diffを使用して

+2

これが「不明瞭」と考えられた理由がわかりません - 「comm」は、あなたが探しているコマンドです。この特定の場合、 'comm -23 A.txt B.txt'。 – twalberg

+1

私は同意します。完全にはっきりと見え、サンプル入力と予想される出力があります。なぜ人々がそれを閉じようとしているのか想像できない。 –

+0

「不明」は「努力していない」ということがないために使用されているようです。 – showdev

答えて

14
awk 'NR==FNR{a[$0]=1;next}!a[$0]' B A 

ファイルはあなたのサンプル入力としてソートされている場合

+0

ありがとう、それは私のために働く。 – user3190479

+0

[なぜ動作するの説明](https://stackoverflow.com/a/32488079/213816) – nonsleepr

2

diff --changed-group-format='%<' --unchanged-group-format='' A.txt B.txt 
+1

この問題で 'diff'が動作するかどうかわかりません。 Aで考える、私は1-10から持っているが、Bで私は9-1と100-200を持っています。すべてがソートされていません。出力は10にする必要があります。 – Kent

+1

質問にファイルが並べ替えられます。それはソートされていないファイルで動作しません。ソートやその他のシェルコマンドを使用してファイルをソートすることができます。 – molokoV

13

使用COMMを試してみてくださいそれを与える、テストしていないを示しています。

$ comm -23 A.txt B.txt 
4 

ファイルがソートされていない場合は、@ Kentのawkソリューションを参照してください。あなたはまた、-v(非一致した行を表示)、-x(行全体が一致)と-fを組み合わせることで、この使用はgrepを行うことができます

+0

これは非常にうまく動作します。 – user3190479

+0

ありがとう!これはまさに私たちが望むものです! – Wang

+3

これは実際の回答としてマークする必要があると思います! – Wang

3

(ファイルからパターンを読む)オプション:

​​

これは依存しません。ファイルの順番に - それはB.

+0

素晴らしい!魅力のように動作し、行をソートする必要はありません。ありがとう。 –

0

(@のrjmunroの回答に加えて)

に行を一致させることから、任意の行を削除します。このためgrepを使用する適切な方法は次のとおりです。 -Fフラグなし

$ grep -F -v -x -f B.txt A.txt 
4 

grepはここに望ましくない基本的な正規表現(BRE)、として、B.txtから読んで、パターンを解釈し、トラブルを引き起こす可能性があります。 -Fフラグを指定すると、grepは改行で区切られた文字列としてPATTERNを扱います。たとえば:

$ cat A.txt 
& 
^ 
[ 
] 

$ cat B.txt 
[ 
^ 
] 
| 

$ grep -v -x -f B.txt A.txt 
grep: B.txt:1: Invalid regular expression 

$ grep -F -v -x -f B.txt A.txt 
& 
関連する問題