awkすき
Shellで文字列を扱うときにちょっとだけ困ったのでメモ.
まとめ
substr()
とlength()
を使う.
# 先頭から1文字削除
$ echo 'abcdefghijkl' | awk '{print substr($0, 2)}'
bcdefghijkl
# 末尾から1文字削除
$ echo 'abcdefghijkl' | awk '{print substr($0, 1, length($0)-1)}'
abcdefghijk
# 先頭と末尾から1文字ずつ削除
$ echo 'abcdefghijkl' | awk '{print substr($0, 2, length($0)-2)}'
bcdefghijk
環境
- macOS Mojave 10.14
- awk version 20070501
やりかた
substr(string, start, length)
は文字列(string
)の頭n文字目(start
)からm文字(length
)を抜き出して表示する.
引数のlength
は省略可能で, 省略した場合は文末まで表示される.
# qwerty の2文字目(w)から末尾まで抽出
$ awk 'BEGIN {print substr("qwerty", 2)}'
werty
# qwerty の2文字目(w)から4文字ぶんを抽出
$ awk 'BEGIN {print substr("qwerty", 2, 4)}'
wert
先頭から文字を抜き出せたが, 末尾から文字を抜き出したい場合もある.length(string)
は文字列(string
)の文字数を数えてくれるので, これとsubstr()
を組み合わせてみる.
# qwertyの文字数は6
$ awk 'BEGIN {print length("qwerty")}'
6
# qwerty の1文字目(q)から(length-1=5)文字ぶんを抽出
$ awk 'BEGIN {print substr("qwerty", 1, length("qwerty")-1)}'
qwert
あとはパイプでつないでいい感じにすればいい.
# ダブルクォート("")で囲まれた文字列("qwerty")から文字列(qwerty)のみを抽出
$ echo '"qwerty"' | awk '{print substr($0, 2, length($0)-2)}'
qwerty
やったぜ.
おわり
やっぱりawk
は神.
もっと使いこなしていきたい.