1. ホーム
  2. command-line

[解決済み] ラインインコモン(逆差分)の表示方法を教えてください。

2022-04-21 12:06:27

質問

一連のテキストファイルがあり、それらの間で異なる行ではなく、共通する行を知りたいのです。コマンドラインはUnixでもWindowsでも構いません。

ファイル名 フー :

linux-vdso.so.1 =>  (0x00007fffccffe000)
libvlc.so.2 => /usr/lib/libvlc.so.2 (0x00007f0dc4b0b000)
libvlccore.so.0 => /usr/lib/libvlccore.so.0 (0x00007f0dc483f000)
libc.so.6 => /lib/libc.so.6 (0x00007f0dc44cd000)

ファイル バー :

libkdeui.so.5 => /usr/lib/libkdeui.so.5 (0x00007f716ae22000)
libkio.so.5 => /usr/lib/libkio.so.5 (0x00007f716a96d000)
linux-vdso.so.1 =>  (0x00007fffccffe000)

ですから、上記の2つのファイルがあれば、目的のユーティリティの出力は次のようなものになります。 file1:line_number, file2:line_number == matching text (単なる提案です。構文がどうであれ、私は本当に気にしません)。

foo:1, bar:3 == linux-vdso.so.1 =>  (0x00007fffccffe000)

解決方法は?

nixでは コマンド . という答えになります。

comm -1 -2 file1.sorted file2.sorted 
# where file1 and file2 are sorted and piped into *.sorted

の完全な使い方は次のとおりです。 comm :

comm [-1] [-2] [-3 ] file1 file2
-1 Suppress the output column of lines unique to file1.
-2 Suppress the output column of lines unique to file2.
-3 Suppress the output column of lines duplicated in file1 and file2. 

また、manページにあるように、commを使用する前にファイルをソートすることが重要であることに注意してください。