ファイルの途中での FS の変更


非常にありがちな問題ですが、皆さんはどうやって処理していますか? 私は FS は 1 つにして、あとは split() で分割したりするケースが多いです。

Question

#field1,field2,field3
#field1,field2,field3,field4
#field1,field2
@field1;field2;field3;field4
@field1;field2;field3
@field1;field2

というファイルがありますが、以下のようにしても思っている通りにならないということです。

$ awk '/^#/{FS=",";print $1}/^@/{FS=";";print $1}' file1
#field1,field2,field3
#field1
#field1
@field1;field2;field3;field4
@field1
@field1

Answer

多分、これがベストと思われますが、フィールドの再構成を行うものです。

awk '/^#/{FS=",";$0=$0;print $1}/^@/{FS=";";$0=$0;print $1}' file

次は私のように split() を使うものです。

$ awk '/^#/{FS=",";split($0,a,",");print
a[1]}/^@/{FS=";";split($0,a,";");print a[1]} file1