(O+P)ut

アウトプット



(O+P)ut

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

【awk】一行の中で文字列を抜き出す

スポンサーリンク

コマンド

文字列b〜文字列eまでを取り出したい場合

awk '{print substr($0, index($0, "b"), index($0, "e") - index($0, "b") + 1)}'

以下、補足です。

補足

以下の記事でhtmlからカテゴリーを取得するために試行錯誤していたのですが

カテゴリ情報は

</p>....({"article_category": "Python,機械学習"})</script>...
......

といったように長い一行の中に
{"article_category":"カテゴリ名1,カテゴリ名2,カテゴリ名3"}
といった構造で格納されていました。

パーサーを使わずに取り出すには「"article_category"」というキーワードに絡めて抽出する必要があります。

そんな中で便利なのが冒頭のワンライナー

awk '{print substr($0, index($0, "b"), index($0, "e") - index($0, "b") + 1)}'

です。

文字列全体($0)の中で"b"で始まり"e"の箇所までを抜き出します。

例えば以下のように出力されます。

$ echo abcdefg | awk '{print substr($0, index($0, "b"), index($0, "e")-index($0, "b") + 1)}'
bcde

ただし、
abcabcdefgといった文字列では最初のbが反応してしまいます。
ご注意ください。

echo abcabcdefg | awk '{print substr($0, index($0, "b"), index($0, "e")-index($0, "b") + 1)}'
bcabcde
関連書籍