テキストストリーム
Linuxにはテキストデータを加工するためのテキストユーティリティコマンドが複数用意されている。これらのコマンドが処理する対象はテキストファイルのみならず、他のコマンドの出力も対象となり、これらをまとめて「テキストストリーム」と呼ぶ。
テキストファイル表示コマンド
| cat [ファイル名] | キャット |
テキストストリーム全体を最初から順に表示
-n:行番号をつけて表示 |
| tac [ファイル名] | タック |
| テキストストリーム全体を最後から逆順に表示
|
| head [オプション] [ファイル名] | ヘッド |
ファイルの先頭(デフォルト10行)の表示
-n 行数:先頭から表示する行数の指定
-行数:同上 |
| tail [オプション] [ファイル名] | テイル |
ファイルの末尾の表示
-n 行数:末尾から表示する行数の指定
-行数:同上
-f:ファイルの末尾に追加される行を表示し続ける |
$ cat lpic.txt
←「lpic.txt」の内容表示
LPI
Linux Professional Institute
Level 1
101
102
Level 2
201
202
Level 3
321
322
323
324
325
32x
↑内容が全て表示される
$ cat -n lpic.txt
←行番号付きで表示
1 LPI
2 Linux Professional Institute
3 Level 1
4 101
5 102
6 Level 2
7 201
8 202
9 Level 3
10 321
11 322
12 323
13 324
14 325
15 32x
↑行番号
$ tac lpic.txt
←内容を逆順に表示
32x
325
324
323
322
321
Level 3
202
201
Level 2
102
101
Level 1
Linux Professional Institute
LPI
$ head lpic.txt
←内容の先頭のみ表示
LPI
Linux Professional Institute
Level 1
101
102
Level 2
201
202
Level 3
321
$ head -n 3 lpic.txt
←先頭3行を指定して内容表示
LPI
Linux Professional Institute
Level 1
$ head -3 lpic.txt
←同上
LPI
Linux Professional Institute
Level 1
$ tail lpic.txt
←内容の末尾のみ表示
Level 2
201
202
Level 3
321
322
323
324
325
32x
$ tail -n 3 lpic.txt
←末尾3行を指定して内容表示
324
325
32x
$ tail -3 lpic.txt
←同上
324
325
32x
|
テキストストリームの加工
| split [オプション] [入力ファイル名] [出力フィル名] | スプリット |
ファイルの分割(デフォルト1000行)
※出力ファイルの拡張子は.aa、.ab…と付けられ保存される
-行数:分割する行数の指定 |
| cut [オプション] [ファイル名] | カット |
各行が特定の区切り文字(デリミタ)で複数のフィールドに分割されているファイル(CSVファイル等)の中から特定のフィールドを抜き出す
-d区切り文字:区切り文字のの指定(デフォルトはタブ)
-fフィールド(,フィールド):抜き出すフィールドの指定 |
| paste [オプション] ファイル名1 ファイル名2 | ペースト |
同じ行毎にファイルの連結を行う
-d区切り文字:区切り文字の指定(デフォルトはタブ) |
| sort [オプション] [+開始位置[-終了位置]] [ファイル名] | ソート |
行単位でソートして表示(デフォルトは昇順)
-b:行頭が空白ならば、その行を無視する
-f:大文字と小文字の区別をしない
-n:数字は数値とする
-r:降順にソートする |
| uniq [オプション] [入力ファイル] [出力ファイル] | ユニーク |
重複行を1行にまとめて表示する
-d:重複行のみを出力
※uniqを行う場合は、あらかじめソートされたテキストストリームで行う |
| expand [ファイル名] | エクスペンド |
ファイル内タブをスペースに変換する
-数字:タブを指定した数のスペースへ変換
-i:行頭のみ変換する |
| unexpand [ファイル名] | アンエクスペンド |
ファイル内の行頭のスペースをタブに変換する
-数字:指定した数のスペースをタブに変換する
-a:行頭以外のスペースも変換する |
| tr [オプション] [文字列1[文字列2]] | |
文字列1を検索し、それを削除、もしくは文字列2に置き換える
-d:マッチした文字列の削除
※文字クラス:文字列の代わりに、文字の種類を指定
[:alpha:]:英字(大文字/小文字)
[:lower:]:英小文字
[:upper:]:英大文字
[:digit:]:数字
[:alnum:]:英数字
[:space:]:スペース
'' :範囲指定 例)'a-h'小文字のa〜hのいずれか。'a-zA-Z'=[:alpha:] |
| join [オプション] ファイル名1 ファイル名2 | |
2つのファイルの共通のフィールドを横に連結する
-j フィールド:連結するフィールドの指定 |
| fmt [オプション] [ファイル名] | |
行の連結や隙間を埋めるなど、各行を指定した文字数にそろえる
-w 文字数:1行の文字数の指定 |
| pr [オプション] [ファイル名] | |
ファイルの印刷時などに、1行の文字数に加え行数もそろえる
-w 文字数:1ページあたりの文字数の指定
-l 行数:1ページあたりの行数の指定 |
| nl [オプション] [ファイル名] | |
行番号を付けて表示する
-b 形式:行番号形式の指定(a:全ての行、t:空白以外の行) |
| od [オプション] [ファイル名] | |
ファイルの内容を8進数もしくは16進数などで表示する(デフォルトは8進数)
-t タイプ:表示タイプの指定(o:8進数、x:16進数) |
$ ls lpic.*
lpic.txt
$ cat lpic.txt
LPI
Linux Professional Institute
Level 1
101
102
Level 2
201
202
Level 3
321
322
323
324
325
32x
←改行のみ(文字列無し)
$ split -3 lpic.txt lpic.
←3行毎にファイルの分割
$ ls lpic.*
lpic.aa lpic.ab lpic.ac lpic.ad lpic.ae lpic.af lpic.txt
←拡張子が「aa」〜「af」に分割されている
$ cat lpic.aa
LPI
Linux Professional Institute
Level 1
←3行毎に分割されている
$ cat lpic.ab
101
102
Level 2
$ cat lpic.ac
201
202
Level 3
$ cat lpic.ad
321
322
323
$ cat lpic.ae
324
325
32x
$ cat lpic.af
←改行だけでも1行とみなす
$
$ cat lpic.aa lpic.ab lpic.ac lpic.ad lpic.ae lpic.af > lpic.tx1
↑分割されたファイルはcatコマンドでファイル標準出力すれば結合可能
$ ls lpic.*
lpic.aa lpic.ab lpic.ac lpic.ad lpic.ae lpic.af lpic.tx1 lpic.txt
↑結合されている
$ cat lpic.tx1
LPI
Linux Professional Institute
Level 1
101
102
Level 2
201
202
Level 3
321
322
323
324
325
32x
←内容も元通り
$ cat lpic.a* > lpic.tx2
←ファイルが多い場合はワイルド・カードで全てを指定
$ ls lpic.*
lpic.aa lpic.ac lpic.ae lpic.tx1 lpic.txt
lpic.ab lpic.ad lpic.af lpic.tx2
←結合されている
$ cat lpic.tx2
LPI
Linux Professional Institute
Level 1
101
102
Level 2
201
202
Level 3
321
322
323
324
325
32x
$
$ cat lpic.csv
lpic1 101 102
lpic2:201:202
lpic3 321 322 323 324 325 32x
$ cut -f1 lpic.csv
←デフォルト「タブ」区切りによるフィールドの1つめを表示
lpic1
lpic2:201:202
lpic3 321 322 323 324 325 32x
$ cut -d: -f2,3 lpic.csv
←「:」区切りによる2,3つめ
lpic1 101 102
←指定された区切り文字が無い行は、そのまま表示
201:202 ←区切り文字が付いたまま、指定された2と3行目が表示
lpic3 321 322 323 324 325 32x
$ cut -d' ' -f8 lpic.csv
lpic1 101 102
lpic2:201:202
←8つめの項目は無いので、表示されない
$
$ cat lpic_1.txt
Linux
Professional
Institute
Level 1
Level 2
Level 3
$ cat lpic_2.txt
101
102
201
202
321
322
323
324
325
32X
$ paste lpic_1.txt lpic_2.txt
Linux 101
←行毎にタブで区切られて連結されている
Professional 102
Institute 201
Level 1 202
Level 2 321
Level 3 322
323
324
325
32X
$ paste -d';' lpic_1.txt lpic_2.txt
←区切り文字に「;」を指定
Linux;101
←「;」で区切られている
Professional;102
Institute;201
Level 1;202
Level 2;321
Level 3;322
;323
;324
;325
;32X
$
$ cat sortdata.txt
LPIC
LPI Linux
101
102
level 1
202
201
LEVEL 2
325
32X
Level 3
323
321
322
1
2
3
10
11
12
$ sort sortdata.txt
←デフォルトでソート
←空白は先頭にくる
101 ←先頭はスペースの為、数字よりも先にくる
102
201
202
325
32X
LPI Linux
1
10
11
12
2
3
321
322
323
LEVEL 2
LPIC
Level 3
←大文字は小文字よりも先にくる
level 1
$ sort -bf sortdata.txt
←先頭のスペースを無視し、大文字・小文字の区別をしない
1
10
101
102
←文字が「1」「0」の順であるため、「1」「1」よりも先になる
11
12
2
201
202
3
321
322
323
325
32X
level 1
LEVEL 2
←大文字・小文字の区別をしない為、先頭5文字は同じと見なされる
Level 3
LPI Linux
LPIC
$ sort -bnr sortdata.txt
←先頭のスペースを無視し、数字は数値として扱い、かつ降順で並べる
325
←数値の「325」として扱う為、「323」よりも先(降順)
323
322
321
202
201
102
101
32X
←数値「32」として扱う為、「101」よりも小さいと判断される
12
11
10
3
2
1
level 1
Level 3
LPIC
LEVEL 2
LPI Linux
$
$ cat uniqdata.txt
101
102
102
201
202
321
321
322
323
323
323
324
325
325
325
32X
32X
$ uniq uniqdata.txt uniqdata_u.txt
←重複行を1つにまとめる
$ cat uniqdata_u.txt
101
102
201
202
321
←全種類が出力されている
322
323
324
325
32X
$ uniq -d uniqdata.txt uniqdata_u.txt
←重複行のみ抜き出し
$ cat uniqdata_u.txt
102
321
323
←重複してない行は出力されない
325
32X
$
$ cat tab.txt
1 2 3 4 5
↑タブ
$ expand -1 tab.txt
←タブを1文字のスペースへ変換
1 2 3 4 5
$ expand -2 tab.txt
←タブを2文字のスペースへ変換
1 2 3 4 5
←1文字のスペースに変換された(調査中)
$ expand -3 tab.txtt
←タブを3文字のスペースへ変換
1 2 3 4 5
←2文字のスペースに変換された(調査中)
$ expand -4 tab.txt
1 2 3 4 5
←指定した数値からマイナス1された数になる?(調査中)
$ cat tab2.txt
1 2 3 4 5
$ expand -i -2 tab2.txt
←先頭のタブのみ、2文字のスペースに変換
1 2 3 4 5
↑変換されている
$
$ cat space.txt
1 2 3 4 5
$ unexpand -1 -a space.txt
←1文字のスペースを1つのタブに変換する
1 2 3 4 5
↑2文字のスペースのみ、2つのタブに変換された(調査中)
$ cat space2.txt
1 2 3 4 5
$ unexpand -2 space2.txt
←先頭のスペース2文字につき、1つのタブに変換する
1 2 3 4 5
↑タブ(1つ)
$ unexpand -1 space2.txt
←先頭のスペース1文字につき、1つのタブに変換する
1 2 3 4 5
↑タブ(2つ)
$
|
テキストストリーム情報の表示
| wc [オプション] [ファイル名] | ダブルシー |
テキストストリームの行数、単語数、バイト数を表示する(オプション無しで全て表示)
-l:行数を表示する
-c:バイト数を表示する
-w:単語数を表示する |
$ cat lpic.txt
LPI
Linux Professional Institute
Level 1
101
102
Level 2
201
202
Level 3
321
322
323
324
325
32x
$ wc lpic.txt
16 20 98 lpic.txt
←左から順に「行数」「単語数」「バイト数」が表示
$ wc -c lpic.txt
←バイト数のみ表示
98 lpic.txt
$
|