Linux覚書 - 5
フィルタによるテキスト処理
- 1 => コマンドラインの操作
- 2 => ファイルやディレクトリの操作
- 3 => Vimの操作
- 4 => 標準入出力とパイプライン
- 5 => フィルタによるテキスト処理現在地
フィルタとは、標準入力を入力として受け取り、(加工した上で)標準出力に出力するコマンドの総称である。
上記の例は、『ファイルAの12行目(def)が、ファイルBの15行目の内容(qvw)に変更(change)された』ということを表している。
パイプラインと組み合わせて使われることが多いため、引数を省略して記載することにする。
カウント
wcで行数・単語数・バイト数を表示wc -lで行数を表示wc -wで単語数を表示wc -cでバイト数を表示
ソート
sortで行をASCIIコード順に並び替えsort -nで数値順に並び替えsort -rで逆順に並び替えsort -k 列番号sでs列目の値によって並び替えsort -uで重複行を1行とみなして表示
重複行の除去
uniqで連続した重複行を除去uniq -cで重複行数をカウント
一部切り出し
cut -d 区切り文字 -f 列番号(複数可※カンマ区切り)で各行の一部(特定の列のみ)を切り出して表示
文字の置換・削除
tr 置換前の文字 置換後の文字で文字を置換して表示tr -d 文字で文字を削除して表示
例えば、アルファベットを全て大文字にしたいときは、次のように指定する。
cat ファイル | tr a-z A-Z
trコマンドは他のフィルタコマンドとは異なり、コマンド単体ではファイルを読み取る能力を持たないため、上記のようなパイプラインか、入力リダイレクトを使う必要がある。
aをAに、bをBに、cをCに置換したいときは、次のように指定する。
cat ファイル | tr abc ABC
trコマンドの引数では、連続した文字は文字列ではなく文字範囲としてみなされる。
末尾部分の表示と追記の監視
tailでファイルの末尾10行を表示tail -n 数値sで末尾s行を表示tail -fで追記監視モードをスタート
差分
diff ファイルA ファイルB
12c15
< def
---
> qvw
<$\cdots$1つ目のファイルにだけある行>$\cdots$2つ目のファイルにだけある行
の部分のは変更種別を表し、やの場合もある。
例えば、
12a15なら、ファイルAの12行目の後に、ファイルBの15行目の内容が追加された12c15なら、ファイルAの12行目が、ファイルBの15行目の内容に変更された12d15なら、ファイルAの12行目の箇所がファイルBでは削除されている
まったく同じ差分をユニファイド出力形式(
-uオプション付き)で得ると、次のようになる。
diff -u ファイルA ファイルB
@@ -12,1 +15,1 @@
abc
-def
+qvw
xyz
の部分は、『ファイルAの12行目から1行、ファイルBの15行目から1行』が変更されたことを表す。
ユニファイド出力形式では、変更部分の前後数行も表示される。
-は削除された行+は追加された行
参考文献
新しいLinuxの教科書