web-dev-qa-db-ja.com

相違:各行の最初のn文字のみを比較するにはどうすればよいですか?

デコードされたバイナリデータから生成されている2つのログファイルがあります。デコーダーは少し異なります、そして私は出力の違いを分離しようとしています。これを行うために、2つのログファイルを比較しています。これは、タイムスタンプが行ごとに異なることを除けば、かなりうまく機能します。何らかの理由で、タイムスタンプの違いは関係ないので、diffはそれらを無視したいと思います。

ログファイルは特定の形式に従っているため、タイムスタンプを無視するために、各行の最後の最大40文字を単純に除外できます。例:

A行目:

[T9] | ENTRY NAME                       varA             = 0000012B  varB             = 00000000 | 000015.508.107.113s | file.cpp              :738

行B:

[T9] | ENTRY NAME                       varA             = 0000012B  varB             = 00000000 | 000015.508.107.163s | file.cpp              :738

私の場合、これらの行は同一として扱われる必要があります。

各行の最初のn文字のみを含めるように、または各行の最後のm文字を除外するようにdiffに指示するにはどうすればよいですか?

4
TheBat

Bashでは、プロセス置換を使用できます。

最後の40文字を削除するには、次を使用できます

diff <(sed 's/.\{40\}$//' file1) \
     <(sed 's/.\{40\}$//' file1)

最初の40を選択するには、

cut -c1-40 file
7
choroba