基本的なコマンド2 ( uniq, diff )
行の重複の消去( uniq )
uniqコマンドを使うことで直前の行と同じ内容があった場合、対象行を出力しない。連続している内容の行を、1行にまとめることができる。
$ uniq [ ファイル名 ]
サンプルファイルの作成
$ cat > uniq-sample AAA BBB AAA CCC CCC DDD ( Ctrl + D で終了)
実行例
$ uniq uniq-sample AAA BBB AAA CCC DDD
uniqの実行により、重複して記述されていた文字列"CCC"が1行にまとめられた。このコマンドを使うことで、全データから重複していない要素だけをピックアップすることができる。
AAAが2つ表示されているのは、AAAは連続して入力されていないからである。この場合はuniqコマンドの処理対象にならない。
文字列の置き換え( tr )
tr コマンドを使うことで、標準入力からのデータを文字ごとに置き換える( TRanslate )ことができる。
$ tr 文字列1 文字列2
tr コマンドは文字を文字ごとに別の文字に置き換えることができる。置き換える元のデータは標準入力からのデータを対象にする。
実行例1
$ cat FILE | tr abc ABC
このコマンドでは以下の2つの処理が行われる。
- cat コマンドによって、FILE を開く
* tr コマンドでa,b,c をそれぞれ A,B,C に置き換える
実行例2 サンプルファイルを作成する
$ cat > translate Android iPhone Windows Phone ( Ctrl + D で終了 )
tr コマンドを実行する
$ cat translate | tr on ON ANdrOid iPhONe WiNdOws PhONe
oがOに、nがNに置き換わっていることがわかる。
tr コマンドの結果は標準出力されるが、リダイレクトすればファイルに出力することもできる。
$ cat translate | tr on ON > translate2 $ cat translate2 ANdrOid iPhONe WiNdOws PhONe
ファイル translate には変更が記録されず、tr の実行結果はファイル translate2 ファイルに出力されている。
ファイルの比較( diff )
Linuxにはファイルを比較するコマンドが存在する。主に使われる用途として、変更の有無を調べる際に用いられる。diff の結果は標準出力されるが、リダイレクトすればファイルに出力することもできる。
$ diff [ オプション ] [ ファイル1 ] [ ファイル2 ]
オプション
-c context diff 形式で差分を出力する -u unified diff 形式で差分を出力する
実行例1
$ diff hoge1 hoge2 $ diff -c hoge1 hoge2 $ diff -u hoge1 hoge2
実行例2 サンプルファイルを作成する。
$ echo "test text" > file1 $ echo "test text" > file2 $ echo "new line" >> file2
diff コマンドを実行
$ diff file1 file2 1a2 > new line
diff -u コマンドによる比較
$ diff -u file1 file2 --- file1 2021-01-21 14:25:57.000000000 +0900 +++ file2 2021-01-21 14:26:10.000000000 +0900 @@ -1 +1,2 @@ test text +new line
diff -c コマンドによる比較
$ diff -c file1 file2 *** file1 2021-01-21 14:25:57.000000000 +0900 --- file2 2021-01-21 14:26:10.000000000 +0900 *************** *** 1 **** --- 1,2 ---- test text + new line
オプションを付けずにdiff コマンドを実行した場合は、異なる部分を標準出力する。
実行例3 file2 の内容を別の文字列で上書きしてdiff コマンドを実行する
$ echo "overrite text" > file2 ( file2 を別の文字列で上書き ) $ echo "new line" >> file2
これで、file1とfile2の共通点がなくなった。ここでdiffコマンドを実行してみる。
$ diff file1 file2 1c1,2 < test text --- > overrite text > new line
「 3つの差分がある 」と表示されているが少しわかりにくい。なので、今度はdiff -u コマンドを実行してみる。
$ diff -u file1 file2 --- file1 2021-01-21 14:25:57.000000000 +0900 +++ file2 2021-01-21 14:36:54.000000000 +0900 @@ -1 +1,2 @@ -test text +overrite text +new line
diff -u コマンドによる比較は、削除された行の頭にマイナス記号、追加された行にプラス記号が付与されて標準出力される。
"test text"という文字列が削除され、"overwride text"と"new line"が追加されたことがわかる。-uオプションは文字列の増減が激しい、文書やプログラムのソースコードを比較する場合に有用である。