DIFFの1つのファイルからの行のリスト


34

1つのファイルで異なる行のみを(GNU)DIFFで印刷したいのですが。だから与えられた

    ==> diffa.txt <==
    line1
    line2 - in a only
    line3
    line4 changed
    line5

    ==> diffb.txt <==
    line1
    line3
    line4 changed in b
    line5
    line6 in b only

diff --someoption diffa.txt diffb.txt生産したい

    line2 - in a only

    line4 changed

次の例は、役立つはずですが、少しわかりにくいです。

   --GTYPE-group-format=GFMT
          Similar, but format GTYPE input groups with GFMT.

   --line-format=LFMT
          Similar, but format all input lines with LFMT.

   --LTYPE-line-format=LFMT
          Similar, but format LTYPE input lines with LFMT.

   LTYPE is `old', `new', or `unchanged'.
          GTYPE is LTYPE or `changed'.

          GFMT may contain:

   %<     lines from FILE1

   %>     lines from FILE2

これらのフラグについては、manページは間違いなく少し簡潔です!良い質問。
quickshiftin

1
'info diff'が完全な例を提供し、infoには豊富な情報があることを指摘したいと思います。
バロウディサフウェン16

回答:


42

diff一人でそれができるかどうかはわかりませんが、いつでも他のGNUユーティリティの力を使って手助けできます。

diff -u diffa.txt diffb.txt | grep '^-[^-]' | sed 's/^-//'

diffを実行し、「-」で始まる行のみを選択します-これらは変更され、diffa.txtファイルの値を持ち、sed「-」記号を削除します。

編集:でいくつかの実験を行った後diff、以下のコマンドが望むものを生成するように見えます:

diff --changed-group-format='%<' --unchanged-group-format='' diffa.txt diffb.txt

ワンオフパイプ方式は問題ありません。私は `perl -ne" print if s / ^-// "`を好むでしょうが、それは好みです。--changed-group-format='%<'私は今私のために何をしているかを見ると思う
....-ジャスティンタイム

ありがとう。:DIは、2台のコンピューター間のすべてのパッケージをリストするためにこのようなものを必要とし、sdiffを使用しましたが、これは少し良く見えます。
ロブ

12

もっと簡単な方法は、commlinuxユーティリティを使用することです(入力にはソートされたファイルが必要です)。標準出力に書き込みます:

  • diffa.txtに固有の行

  • diffb.txtに固有の行

  • 一般的な行

パラメータ1、2、または3に応じて、それぞれを抑制できます。したがって、あなたの場合は次のようになります:

comm -23 diffa.txt diffb.txt

diffb.txtに固有の行、一般的な行を抑制し、diffa.txtにのみ固有の行を出力します

出典:https : //www.tutorialspoint.com/unix_commands/comm.htm


私はこれがdiff私が期待することをしていないよりもはるかに簡単だと感じました。そして、BSD(つまりMac OS X)とUbuntuの両方にプリインストールされているため、パッケージマネージャーの悪夢はありません。
スリダールサルノバト

3

commソートされた入力ファイルを予期しているため、レポートとは異なる結果を報告することに言及したいと思いますdiff

diff --changed-group-format='%<' --unchanged-group-format='' diffa.txt diffb.txt

普遍的です。@vavaへの称賛

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.