コマンドで区切り文字を指定して部分文字列を取得

こんにちは、さるまりんです。

部分文字列を取り出す。よくやりますよね。

コマンドで位置指定で取り出すのを以前書かせてもらいました。

今回は区切り文字でやってみます。

この文字列

2022-01-03 08:00:00,getting-fields-by-specific-delimiter-using-commands,コマンドで区切り文字を指定して部分文字列を取得,linux,15

からカンマ区切りで1つめ「日時」の部分と3つめ「日本語の記事タイトル」をとり出してみます。

まずはcutコマンドで。

cutコマンドで区切り文字と取り出す位置を以下のように指定します。

cut -d[区切り文字] -f[取り出す位置]

実行例はこんな感じです。

$ echo '2022-01-03 08:00:00,getting-fields-by-specific-delimiter-using-commands,コマンドで区切り文字を指定して部分文字列を取得,linux,15' | cut -d ',' -f1,3
2022-01-03 08:00:00,コマンドで区切り文字を指定して部分文字列を取得

-f[位置1],[位置2]

と複数の位置を指定しています。

連続する位置を指定するには
-f[位置1]-[位置2]

と指定することもできます。

上と同じ文字列について、1つ目と4から5つ目を指定するとこんな風になります。

$ echo '2022-01-03 08:00:00,getting-fields-by-specific-delimiter-using-commands,コマンドで区切り文字を指定して部分文字列を取得,linux,15' | cut -d ',' -f1,4-5
2022-01-03 08:00:00,linux,15

4つ目以降すべてを指定するときは後の方の指定はこんな風に省略できます。

$ echo '2022-01-03 08:00:00,getting-fields-by-specific-delimiter-using-commands,コマンドで区切り文字を指定して部分文字列を取得,linux,15' | cut -d ',' -f1,4-
2022-01-03 08:00:00,linux,15

awkでもやってみます。

awk 'BEGIN {FS="[区切り文字]";"[区切り文字]"} {print [出力する位置]}'

$ echo '2022-01-03 08:00:00,getting-fields-by-specific-delimiter-using-commands,コマンドで区切り文字を指定して部分文字列を取得,linux,15' | awk 'BEGIN {FS=",";OFS=","} {print $1,$3}'
2022-01-03 08:00:00,コマンドで区切り文字を指定して部分文字列を取得

FSOFSで入力時と出力時の区切り文字カンマを、print $1,$3で出力する位置1つ目と3つ目を指定しています。

awkはもっといろんなことできると思うので今後も学びメモしていきたいです。

読んでくださってありがとうございました。

それではまた!