2つのファイルの最初の行のみを比較するにはどうすればよいですか?


17

ファイル全体ではなく、2つのファイルの最初の行のみを比較します。どうすればいいですか?最初の行の解決策だけが必要ですが、行数を指定できれば、より良い答えになります。

したがって、diffは次の2つのファイルの違いを返しません。

a
1
2

そして:

a
3
4

それはあなたのために働きましたか...?
-nerdwaller

@nerdwallerはい、受け入れられました。
gsingh2011

涼しい豆。他のオプションを考えようとしていましたが、幸いなことにそれは必要ありません。
-nerdwaller

回答:


26

どうぞ:

diff <(head -n 1 file1) <(head -n 1 file2)

(これはまったく何も返しません)。

diff <(head -n 2 file1) <(head -n 2 file2)

Returns:
2c2
< 1
---
> 3

それをスクリプトに組み込んで、言及したことを実行できます。

#!/bin/bash

fileOne=${1}
fileTwo=${2}
numLines=${3:-"1"}

diff <(head -n ${numLines} ${fileOne}) <(head -n ${numLines} ${fileTwo})

それを使用するには、スクリプトを実行可能にしchmod +x nameofscript.shてから実行する./nameofscript.sh ~/file1 ~/Docs/file2だけです。コマンドの最後にさらに番号を追加する場合は、デフォルトの行数を1のままにします。

(または、スクリプトで-f1 file1 -f2 file2 -n 1を使用して切り替えを行うこともできますが、そのためのcaseステートメントを頭の中で思い出せません)。

headによって提案された行数を最初から返します-n。逆にしたい場合は、逆になりますtail -n ${numLines}(末尾から最後まで行数を戻します)。

5/10/16を編集:

これはBash(および互換性のあるシェル)に固有です。他の何かからこれを使用する必要がある場合:

bash -c 'diff <(...) <(...)'

2つのディレクトリを比較する必要がある場合、再帰的差分ではどのように機能しますか?
lanoxx

ディレクトリdiff -r dir1 dir2用の@lanoxx。それを制限するために、おそらくそれを他の何かにパイプしたいでしょう。詳細があれば新しい質問を開いて、ここにリンクを張ってください。
nerdwaller

基本的には同じ質問を再帰的に実行します。2つのディレクトリ内のすべてのファイルの差分のみ(最初のn行|最初のn行を除くすべて)。
lanoxx

@lanoxxは私が言ったように、新しい質問を作成してリンクします。他のユーザーの質問の範囲を広げるのではなく、スーパーユーザーコミュニティのベストプラクティスです。
nerdwaller

1
@Veridianどのシェルを使用していますか?これはbash固有であるため、電話する必要がある場合がありますbash -c "diff <(...) <(...)"
-nerdwaller

-1

diff -U(n行)file1 file2


1
スーパーユーザーへようこそ!-U議論について少し詳しく説明していただけますか?:)
bertieb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.