web-dev-qa-db-ja.com

2つのファイルの最初の行だけを比較する方法は?

ファイル全体ではなく、2つのファイルの最初の行のみを比較したい。どうすればいいですか?最初の行のソリューションだけが必要ですが、行数を指定できれば、はるかに良い答えになります。

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

a
1
2

そして:

a
3
4
17
gsingh2011

どうぞ:

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を使用してスイッチを切り替えることもできますが、そのためのケースステートメントを頭の中で思い出せません)。

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

2016年5月10日を編集:

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

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