(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Bash/Linux/awk】最終列以外の文字列を句読点区切りで切り出す

スポンサーリンク

やりたいこと

以下のような日本語文字列があった場合に

# echo "あい。かき。さし。たち"
あい。かき。さし。たち

最後の列を切り捨てて

あい。かき。さし。

のみを取り出したい。

環境情報
  • Debian GNU/Linux 9 (stretch)

やり方

以下のワンライナーにて

# echo "あい。かき。さし。たち" | awk 'BEGIN{FS="。";OFS="。"}{c="";for(i=1;i<NF;i++) c=c $i"。"; print c}'

要件を満たした切り出しが行える。

あい。かき。さし。

以下、補足です。

補足

Twitterのような文字列制限があるプラットフォームに日本語文字列を切り出す際に利用ができます。

実現方法は多々あると思いますが、今回は全角文字をawkで区切った上でfor文にて条件分岐にかけました。

前者はcutコマンドではできないためawkを利用して実現をし、後半は最終列数であるNFとの条件分岐によって実現しています。

{c="";for(i=1;i<NF;i++) c=c $i"。"; print c}'

このワンライナーは初期条件を変えることで先頭の文字列のみを除外する・・といったように柔軟な制御が可能となるので

# echo "あい。かき。さし。たち" | awk 'BEGIN{FS="。";OFS="。"}{c="";for(i=2;i<=NF;i++) c=c $i"。"; print c}'
かき。さし。たち。

要件に応じて活用ください。