1. ホーム
  2. コース一覧
  3. LinuC Level1 v10.0 対策コース(パート1)
  4. Linuxコマンド [expand/unexpand/od/paste/join/split編]

中級

LinuC Level1 v10.0 対策コース(パート1)

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 cASCII文字で出力する
-t o8進数 (octal)で出力する
-t d符号付き10進数 (decimal)で出力する
-t u符号なし10進数で出力する
-t x16進数 (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分割するテキストの行数を指定する
-nnに分割ファイル数を指定する (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には他にもテキスト編集に関する記事やシナリオがありますので是非ご覧ください。

記事の内容は理解できましたか?