スポンサーリンク

FS変数で","区切りのファイルを処理

※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-

スクリプトを書くときなどは、FS変数で区切り文字を設定すると見易くなりますね。
※MACターミナル(BSD系)での動作確認です。
BEGINブロックで、FS変数の設定をすると良いかと思います。
参考:awkで変数の初期化はBEGINブロック内が基本

例えば、下記のin.txtがあったとします。

 $ cat in.txt 
c11,c12,c13
c21,c22,c23
c31,c32,c33

下記がサンプルコードになります。
FS変数に、","を設定しています。
 $ cat sample.awk 
#!/bin/sh
cat in.txt | awk '		
	BEGIN{
		FS = ","
	}
	{
		print $1
	}
'

下記が実行結果になります。
in.txtの1列目をprint出力しています。
 $ ./sample.awk 
c11
c21
c31

スポンサーリンク

FS変数でタブ区切りのファイルを処理

次は、タブ区切りのファイルを処理してみます。

例えば、下記のin.txt(タブ区切り)があったとします。

 $ cat in.txt 
c11	c12	c13
c21	c22	c23
c31	c32	c33

下記がサンプルコードになります。
FS変数に、"\t"を設定しています。
 $ cat sample.awk 
#!/bin/sh
cat in.txt | awk '		
	BEGIN{
		FS = "\t"
	}
	{
		print $2
	}
'

下記が実行結果になります。
in.txtの2列目をprint出力しています。
 $ ./sample.awk 
c12
c22
c32

FS変数で複数の区切り文字を設定

FS変数で複数の区切り文字を設定する場合には、"[区切り文字A区切り文字B区切り文字C]"の形式で、区切り文字を複数記述します。

例えば、","と"\t"を区切り文字に設定したい場合には、下記のようにFS変数を設定します。

FS = "[,\t]"

例えば、下記のin.txtがあったとします。

$ cat in.txt 
c11,c12	c13
c21,c22	c23
c31,c32	c33

下記がサンプルコードになります。
$ cat sample.awk 
#!/bin/sh
cat in.txt | awk '		
	BEGIN{
		FS = "[,\t]"
	}
	{
		print $3
	}
'

下記が実行結果になります。
$ ./sample.awk 
c13
c23
c33

awkのFS変数のデフォルトはスペース

awkのFS変数のデフォルトはスペースが設定されています。

実際にFS変数の中身を出力させてみます。

$ echo hello | awk '{print "FS変数のデフォルトは" FS "です"}'
FS変数のデフォルトは です

スポンサーリンク