何者にもなれていない5年目のエンジニアブログ

Linuxコマンドを使いこなす。grep、sed、awk ( Linuxコマンドを制するものは障害対応を制す)

今日、紹介するのは、grepsed(置換)とawkです。

例えば、今までずっとコードでベタ書きしていたデータがどんどん増えてきて、データベースでの管理に変えたい時などがありますよね。

例えばこういう時、item_idと値段(price)をあろうことかハッシュで管理してたとします。

ファイル名 item.pmとします。

# item_id と値段の紐付け
$item_price = {
    1 => 5000,
    2 => 3000,
    3 => 1000,
    4 => 1000,
    5 => 6000,
    6 => 7000,
    7 => 1000,
}

で、これをデータベース(item_data (item_id、price))で管理するとなると、

(´-`).。oO(insert into item_data values(1,5000)とかして一個一個入れるしかないか)

と、思いがちですが、次の理由からしたくありません。

1. 面倒。

2. タイプミスする可能性がある。

そこで、

~Linuxコマンド~

を使います。

ここで、やりたいことは、

1. item_idとpriceの行を抜き出したい。

2. priceの","を消したい。

3. クエリを作りたい。

です。

答えからですが、grepsedawkを使って、

grep "=>" item.pm |sed -e "s/,//g"|awk '{print "INSERT INTO api_client VALUES("$1" ,"$3");"}'

で、できます。

説明すると、

1. item_idとpriceの行を抜き出したい。(grep "=>" item.pm で"=>"の行を抜き出す)

2. priceの","を消したい。(置換コマンドsed -e "s/,//g" で、,を消去する。)

3. クエリを作りたい。(awk '{print "INSERT INTO api_client VALUES("$1" ,"$3");" でスペース区切りで数えて左から一つ目のitem_idは"$1" に、三つ目のprice"$3"に代入される)

となります。 このようにLinuxコマンドを使えるとすごい作業効率が上がります。

参考まで