Works by

Ren's blog

@rennnosuke_rk 技術ブログです

【shell】awkで引数文字列から部分文字列を取得する

やり方

$ cat hoge.txt | awk '{print substr($0,1,2)}'   

概要

shellの強力なコマンドの一つにawkがあります。

AWK - Wikipedia

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ライクな関数は結構使えそうなので便利ですね。