テキスト処理に便利なコマンド

ここでは,テキスト(表系のデータ)の処理に便利な UNIXコマンド をメモしておきます.

警告

このページで使用している図に関して

このページで使用している図は [orangain flavor : inuxコマンドでテキストデータを自在に操る](http://orangain.hatenablog.com/entry/20100916/1284631280) さんから引用したものです. 私のページ自体は基本的に私用のメモ書きのつもりで記述しているものなのですが,何か問題のある場合にはご連絡ください.

列結合

あるファイル同士を横に結合します. これは場合によって 2種類の コマンドが使用できます.

$ paste file1 file2

イメージ的には以下の感じ. paste は file1 と file2 を単純に横にくっつけるだけです.

一方, フィールドが共通な行を結合する場合, join を使用します.

$ join file1 file2

列抽出

一方, 指定の列のみを抽出したい場合には awkcut を使用します. やりたい作業のイメージは以下の通りです.

$ cut -d delimiter -f fields

注釈

cut の使用方法

delimiter には区切る文字を指定します. * デフォルトはタブ (t) です.

fields には抽出する列を以下のように指定します. * -f 1: 1列目を指定 * -f 1,3: 1列目と3列目を指定 * -f 1-4: 1〜4列目を指定 * -f 3-: 3列目以降を指定

ただし, 列の抽出に関しては awk の方が便利でしょう. これは, perl のようにスクリプトを記述することもでき,かなり複雑なことができます.

$ awk '{print fields}'

注釈

awk の使用方法

fields は $1,$3 のように出力するフィールドを指定します.

  • awk の場合,一行目が $1 です,
    • $0 とするとすべての行をプリントします.
  • なお区切り文字はデフォルトではスペースです.
    • タブ区切りにする場合以下のようなオプションを使用します.
awk -F'\t' '{print $1"\t"$2}'
  • また, if文を使用して任意の行のみを抽出することも可能です. * 下記スクリプトでは7行目が”p1”となっている場合のみ,3行目,5行目をこの順番でプリントさせています.
$ awk -F'\t' '{if ($7=="p1") print $3"\t"$5}'

行結合

ファイル同士を縦に結合したい場合, cat を使用します. cat 自体は一番最初に教わるコマンドですが,時々知らない方もいらっしゃいます.

$ cat file1 file2