2010年4月19日月曜日

タブ区切りでファイルを読み込む方法 - AWK

AWKの入出力とコマンド実行機能
AWKプログラムを書く
ファイル読み込み時の単語区切り規則を変更したい時は、変数FSを指定します。
o 空のデータを読み飛ばしたくない場合、FS="[\t]"; のように、正規表現で書きます。
   + 文字列として指定します。正規表現の左右にある/は不要です。
   + 普通に FS="\t"; と書いても同じ動きをしますが、FS=" ";と書いた時に予想と異なる動きをしますので、気を付けます。
o 連続したタブを読み飛ばす場合、FS="[\t]+";

**** 例。空のデータを読み飛ばさない書き方
o テストデータ  in.txt
--------
あいうえお    かきくけこ        さしすせそ
--------

  最初の区切りをタブ1つ。次の区切りをタブ2つに置き換えます。

o プログラム  a.awk
--------
BEGIN {
 FS = "[\t]";
}
{
  print "1行分 = " $0; # 「あいうえお    かきくけこ        さしすせそ」
  print "1番目 = " $1; # 「あいうえお」が入ります。
  print "2番目 = " $2; # かきくけこ
  print "3番目 = " $3; # 何も入りません。(= 空データ)
  print "4番目 = " $4; # さしすせそ
}
--------

    + 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。
    + 出てくる単語の意味は、「FS = 読み込んだ行を列に分割する時の区切り文字
    + 「RS = 1行読み込む時の改行文字
    + 「print = ファイルなどに書き出す
    + 「FIELDWIDTHS = 固定長ファイルを読み込む為の設定

o 実行コマンド例
--------
gawk -f a.awk in.txt > out.txt
--------



==
関連ページ:
    ▼AWKの入出力関数とコマンド実行機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > AWKでバイナリ出力する(mawk, Gawk専用)
    AWKでバイナリ入力する(Gawk専用)
    > 文字列を組み立てる
    プログラムの基本パターン
(2010年6月8日訂正。FS="\t"の時、データを読み飛ばさない)