LinuC Level1 v10.0 対策コース(パート1)28/39
Linuxコマンド [expand/unexpand/od/paste/join/split編]
この記事ではテキストファイルの編集に使用するコマンドの解説をしていきます。
expandコマンド
テキストファイル内のタブを半角スペースに置き換えるためのコマンドです。
書式
$ expand [オプション] [ファイル名]
オプション
オプション | 説明 |
---|---|
-i | 行頭(initial)のタブのみ変換する |
-t | 揃える基準となる文字数を指定する |
使用例
# demo.txtというファイルを作成します。
$ vi demo.txt
======================================================================
I use tabs in this file.
And I want you to change them to spaces using expand command.
When you are done with that task, I will take you drinking.
======================================================================
$ expand demo.txt > expanded.txt
$ cat expanded.txt
I use tabs in this file.
And I want you to change them to spaces using expand command.
When you are done with that task, I will take you drinking.
見た目上わかりにくいですが、タブからスペースへの変換が行われています。
unexpandコマンド
expand
コマンドとは逆で、スペースをタブに変換するためのコマンドです。書式は同じです。
オプション
オプション | 説明 |
---|---|
-a | すべて変換する |
-t | 揃える基準となる文字数を指定する |
使用例
$ unexpand expanded.txt > unexpanded.txt
$ cat unexpanded.txt
I use tabs in this file.
And I want you to change them to spaces using expand command.
When you are done with that task, I will take you drinking.
odコマンド
od
(octal dump)は入力されたファイル(データ)を2進数(バイナリ)や8進数、16進数でダンプします。オプションなしで実行する場合は8進数(octal)でダンプします。
※ データを何らかの形式で出力することを「ダンプする」といいます。
書式
$ od [オプション] [ファイル名]
オプション
オプション | 説明 |
---|---|
-N | 表示するバイト数を指定する |
-j | 先頭から指定されたバイト数だけスキップする |
-t | 指定されたタイプのフォーマットで出力する |
-t c | ASCII文字で出力する |
-t o | 8進数 (octal)で出力する |
-t d | 符号付き10進数 (decimal)で出力する |
-t u | 符号なし10進数で出力する |
-t x | 16進数 (hexadecimal)で出力する |
使用例
# sample.txtを8進数にダンプします。
$ od sample.txt
0000000 067507 063557 062554 040412 070160 062554 043012 061541
0000020 061145 067557 005153 066501 075141 067157 000012
0000035
pasteコマンド
複数ファイルのテキストを行単位で結合するためのコマンドです。
書式
$ paste [オプション] [ファイル1] [ファイル2] [ファイル..]
オプション
オプション | 説明 |
---|---|
-d | 区切り文字を指定する |
-s | 指定したファイルの順序に表示する |
使用例
# pprefecture.txt、population.txt、area.txtという3つのファイルを作成します。
# ファイルを別々に表示すると冗長になるため、横並びにして表示してることをご了承ください。
┬────────────────┬────────────────┬──────────┬
| prefecture.txt | population.txt | area.txt |
┼────────────────┼────────────────┼──────────┼
|Tokyo |14,011,487 |2,194.05 |
|Kanagawa |9,236,428 |2,416.11 |
|Osaka |8,807,279 |1,905.34 |
┴────────────────┴────────────────┴──────────┴
# 3つのファイルを結合します。
$ paste area.txt population.txt prefecture.txt
2,194.05 14,011,487 Tokyo
2,416.11 9,236,428 Kanagawa
1,905.34 8,807,279 Osaka
joinコマンド
複数ファイルのテキストデータを結合(join)するためのコマンドです。ここで重要なことは、それぞれのファイルで共通する主キー(今回の例では1~4の数字)が存在することです。
書式
$ join [オプション] [ファイル1] [ファイル2]
オプション
オプション | 説明 |
---|---|
-a | 指定されたファイルのすべての行を結合する |
-i | 大文字・小文字を区別しない |
-j | 主キーとする列を指定する |
-o | 出力する列を指定する |
-t | 区切り文字を指定する |
-v | 一致しない行を出力する |
使用例
# fruits.txtとprice.txtという2つのファイルを作成します。
# ファイルを別々に表示すると冗長になるため、横並びにして表示してることをご了承ください。
┬────────────┬────────────┬
| fruits.txt | prices.txt |
┼────────────┼────────────┼
|1 apple |1 200 |
|2 orange |2 60 |
|3 banana |3 100 |
|4 melon |4 3000 |
┴────────────┴────────────┴
# 主キー(今回の例では1~4の数字)を基準に結合されていることに注目しましょう。
# 2つのファイルを結合します。
$ join fruits.txt price.txt
1 apple 200
2 orange 60
3 banana 100
4 melon 3000
splitコマンド
ファイルを複数ファイルに分割(split)するためのコマンドです。
書式
$ split [オプション] [元となるファイル名] [分割ファイル]
オプション
オプション | 説明 |
---|---|
-b | 分割ファイルのサイズを指定する |
-l | 分割するテキストの行数を指定する |
-n | nに分割ファイル数を指定する (1つ目のファイルから、xaa, xab, xacというファイル名になります) |
使用例
# fruits.txtファイルを用意します。
$ cat fruits.txt
1 apple
2 orange
3 banana
4 melon
# -lオプションで2行ずつに分割します。
$ split -l 2 fruits.txt split_fruits
$ ls -l
-rw-r--r-- 1 user staff 12 10 13 11:01 fruits.txt
-rw-r--r-- 1 user staff 6 10 13 11:01 split_fruitsaa
-rw-r--r-- 1 user staff 6 10 13 11:01 split_fruitsab
# 2行ずつで2つのファイルへ分割されました。
# ファイルを別々に表示すると冗長になるため、横並びにして表示してることをご了承ください。
┬────────────┬────────────┬
| fruitsaa | fruitsab |
┼────────────┼────────────┼
|1 apple |3 banana |
|2 orange |4 melon |
┴────────────┴────────────┴
まとめ
今回は様々なテキスト編集のコマンドについて解説しました。Envaderには他にもテキスト編集に関する記事やシナリオがありますので是非ご覧ください。
記事の内容は理解できましたか?