2016-06-15 13 views
-1

2つのファイルの違いを出力する簡単なgrepコマンドを使用していて、Windows 10(cygwin grep)でうまく動作し、Windows 10のUbuntuベースのBashシェルでCygwinのGrep、 Mac OS X Yosemiteでは動作していません。ここで2つのリスト間のgrepの違い

は、私が使用してきた非常にシンプルなコマンドラインされる:MacのOS Xは、端末からそのコマンドを発行して

grep -F -v -f list1.txt list2.txt > differences1.txt 

は、画面に長い休止していない出力を発生します。 list1.txtとlist2.txtの両方をチェックして、それぞれのOSで適切な行終端があり、動作しないことを確認しました。 grepのmanページとコマンドラインのヘルプを参考にしてみましたが、この問題の原因となる異なるOS間のパラメータの違いを見分けることはできません。しかし、ここの記録には、Windows 10のBash Shell Grepバージョン(GNU grep 2.16)とMac OS X Yosemite(BSD grep 2.5.1-FreeBSD)があります。

+0

何行終端として出力を生成しますOSX上の適切な?そして 'list1.txt'に空行がありますか? – andlrc

+0

このコマンドは、ヨセミテで私にとって期待通りに機能します。デモ:http://pastebin.com/eiPJmqBc - 再現性のないものとして閉じる投票。 – tripleee

+0

間違いなく私のために働いていません。ここにスクリーンキャップがあります。[リンク](http://tinypic.com/r/2mx2zi8/9) – QuePID

答えて

1

あなたは正しいgrep(あなたPATHに早く見つけなければ起きていない別名、関数、またはいくつかのスクリプト)を実行していることを確認してください:

/usr/bin/grep -F -v -f list1.txt list2.txt > differences1.txt 

のFreeBSDにおけるツールの数(上Mac OS Xのベース)、GNUディストリビューションは機能が異なります。つまり、コマンドのパラメータは実際にはバージョン間で一貫しています。

brew tap homebrew/dupes; brew install grep 

をしてから、コマンドggrepを使用して、それを実行します。

あなたは自作でのGNU grepのをインストールすることができます。サイドノートとして


:あなたとしてgrepを使用するGNU coreutilsをインストールする

brew install coreutils 
1

techrafさんの提案:あなたがまたしても(dategdateのような)異なる他のGNUツールをインストールすることができますWindows Bash Shellで使用されているものは常にあなたのために働きます。それはFreeBSD awkは、以下のロジックを持つ2つのファイルの差分を取得するのに十分な機能を有していてもすることなく、

: - 私のファイルを想定しawk version 20091126 (FreeBSD)

に確認されたように

awk 'NR == FNR{a[$0]++; next} !($0 in a)' file1 file2 

は、2つのファイルの差分を行います以下のようなものです: -

FILE1: -

1 
2 
3 
4 

FILE2: -

2 
5 

file1で一意である行を取得するには、やる

awk 'NR == FNR{a[$0]++; next} !($0 in a)' file2 file1 

file2で一意である行を取得するには

1 
3 
4 

として出力を生成します、do

awk 'NR == FNR{a[$0]++; next} !($0 in a)' file1 file2 

5 
関連する問題