【shell】awkで引数文字列から部分文字列を取得する
やり方
$ cat hoge.txt | awk '{print substr($0,1,2)}'
概要
shellの強力なコマンドの一つにawk
があります。
awkを使い始めて未だ日が浅いのですが、コマンド出力を一旦整形して他のコマンドに渡したり、ログファイルを時々で必要な形にパースをする際にお世話になってます。
部分文字列の取得はcut
コマンドでも可能なのですが、awkのやり方も調べてみたらあったのでメモりました。
src
awkに渡す命令中でsubstr()
関数を呼び出します。
第1引数にカットしたい文字列、第2-3引数に開始・終了インデックスを渡します(インデックスは1から開始)
# dummy file $ cat hoge.txt hoge1 fuga1 piyo1 hoge2 fuga2 piyo2 hoge3 fuga3 piyo3 # awkでも全項目表示 $ cat hoge.txt | awk '{print $0}' hoge1 fuga1 piyo1 hoge2 fuga2 piyo2 hoge3 fuga3 piyo3 # 各行の先頭から二文字目までの部分文字列取得 $ cat hoge.txt | awk '{print substr($0,1,2)}' ho ho ho
まとめ
substr()
に限らず、Cライクな関数は結構使えそうなので便利ですね。