プロが教える店舗&オフィスのセキュリティ対策術

カンマ2つ(,,)+文字の抽出方法がわかりません・・・。

例:
ファイル内(下記2行)に対して
12,34,,567@89
1,2,34,,567@89

1行目2行目ともに「567」が表示したいです。

# ”カンマ2つを一つの文字列”だけだと「awk -F",,"」でいけますが、+文字列がどうやってもできません。。

A 回答 (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

こんなことをすれば出来なくはありませんけど…。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/06/17 19:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!