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は神.
もっと使いこなしていきたい.
おまけ

