[bash]文字列の切り抜き

bash

いくつか方法がありますが、ちょっとづつ挙動が違うので解説します。
ここでは全て以下のsample.txtを整形した場合を例にしています。

cutコマンド

cutコマンドで文字列を切り抜くことができます。任意の文字列をセパレータとして、xフィールド目を取り出す方法と、x文字目〜y文字目といった指定もできます。

フィールド指定

「-d」オプションで区切り文字を指定し、「-f」 オプションで取り出すフィールドを指定します。
複数フィールドを出力する場合は、「,」で区切るか、連続で選択する場合は「-」で指定します。

  • 指定した区切り文字がない場合、全量出力されます。
  • フィールド間の区切り文字は、そのまま指定した区切り文字です。
文字数指定

「-c」オプションでx文字目を指定して切り出せます。
フィールド指定の「-f」オプションと同様に「,」か「-」を使って複数指定します。
「,」で区切った場合、出力のセパレータがないため連続して出力されます。

awkコマンド

セパレータにする文字が1つだけの場合

別でまとめましたが、 -Fオプションか、FS変数の指定で区切り文字を指定することで任意のフィールドを抜き出せます。
cutコマンドと違って、指定した区切り文字がない場合は空行になります。

  • 指定した区切り文字がない場合は空行で出力されます。
  • フィールド間の区切り文字はデフォルトだと空白です。OFS変数や構文で指定している場合、指定された文字列で区切られます。

セパレータにする文字が複数ある場合

フィールドセパレータにする文字を複数指定したい場合、awkの-Fオプションで「'[]’」を使うことで複数指定することができます。

コメント

タイトルとURLをコピーしました