• ベストアンサー

unix awkコマンド 複数区切り

カンマ2つ(,,)+文字の抽出方法がわかりません・・・。 例: ファイル内(下記2行)に対して 12,34,,567@89 1,2,34,,567@89 1行目2行目ともに「567」が表示したいです。 # ”カンマ2つを一つの文字列”だけだと「awk -F",,"」でいけますが、+文字列がどうやってもできません。。

質問者が選んだベストアンサー

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6849/9742)
回答No.1

awk はセパレータに従ってレコード(行)をフィールドに分割してしまうので、分割されたレコード内にカンマがもうありません。 -F, での「12,34,,567@89」→$1 $2 $3 $4 = "12""34" "" "567@89" -F, での「1,2,34,,567@89」→$1 $2 $3 $4 $5="1" "2" "34" "" "567@89" -F,, での「12,34,,567@89」→$1 $2 = "12,34" "567@89" -F,, での「1,2,34,,567@89」→$1 $2 ="1,2,34" "567@89" 自動分割してしまう仕様から、フィールド番号が不定になるデータというのはawkでは非常に扱いづらいと思われます。 最終フィールドを表す $NF があり、最終フィールド番号 NF はありますが。 これを使って、「最後から2番目にある」という決め打ちならば、$(NF-1) と言う形で最後から2番目のフィールドを取り出すことは出来ます。 今回の場合、最終フィールドの、@以降を消去した文字列、と言うことで、 awk -F, '{sub("@.*","", $NF); print $NF}' <datafile こんなことをすれば出来なくはありませんけど…。

kikko-mann
質問者

お礼

調べていくなかで、検索文字列がイマイチということがわかりました。笑

関連するQ&A