コマンドで位置を指定して部分文字列を取得

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

substring。他の文字列から位置を指定して一部分取り出すってよくやります。今回はそれをコマンドでやってみます。

abcdefghijklmnopqrstuvwxyz

この文字列から切り取ってみます。

まずはcutを使ってみます。

cut -c[開始位置]-[終了位置]

で、部分文字列が取れます。

5文字目から10文字目までを切り出してみます。

$ echo 'abcdefghijklmnopqrstuvwxyz' | cut -c5-10
efghij

cut -c[位置1],[位置2]

のように指定すると、その場所の文字を切り出すことができます。

5文字目と10文字目を切り出してみます。

$ echo 'abcdefghijklmnopqrstuvwxyz' | cut -c5,10
ej

範囲を複数指定することもできます。

5〜10文字目、15〜20文字目を切り出してみます。

$ echo 'abcdefghijklmnopqrstuvwxyz' | cut -c5-10,15-20
efghijopqrst

今度はawkを使ってみます。

awk '{print substr([文字列], [開始位置], [文字数]);}'

awkでは開始位置と切り出す文字数を指定します。

同じ様に5文字目から10文字目までの6文字を切り出してみます。

$ echo 'abcdefghijklmnopqrstuvwxyz' | awk '{print substr($0, 5, 6);}'
efghij

今度は5文字目と10文字目を切り出してみます。

$ echo 'abcdefghijklmnopqrstuvwxyz' | awk '{print substr($0, 5, 1) substr($0, 10, 1);}'
ej

複数の範囲指定、5〜10文字目、15〜20文字目を切り出してみます。

$ echo 'abcdefghijklmnopqrstuvwxyz' | awk '{print substr($0, 5, 6) substr($0, 15, 6);}'
efghijopqrst

cutの方がシンプルに取り出せた印象ですが、awkもいろんなことができそうです。
他の使い方についても今後触れていきたいと思います。

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

それではまた!