【初心者】awkコマンドの基本操作とjsonの値の取得

Web

概要

JSONの値を抽出するとき、awkコマンドが思いの外便利でしたので、記事にまとめてみます!

JSONの値の抽出には「jq」も便利ですが、インストールされていない場合には、awkを使用してみるのも手かと思います。

 

awkとは

awkとは、Linuxでサポートされているスクリプト言語で古くから(1977年~)存在しています。

下記のような特徴があります。

  • 簡単な行ベースのテキストファイルを処理するのに適している
  • 文字列に対して、フィールド区切り文字を指定して、処理することが可能

 

awkコマンドの基本操作

下記のような書式で書くことが多いです。

awk -F ‘[フィールドの区切り文字’] -v ‘変数=xx’ ‘{awkコマンド} file
標準出力を行うawkコマンド「print」を利用し、動作を確認していきます。

1フィールド目を取り出すコマンド

1フィールド目を取り出すには、「$1」を使います。

フィールドの区切り文字を指定しない場合、区切り文字にはタブまたは半角スペースが選択されます。

echo 1 2 3 4 | awk ‘{print $1}’
1

フィールド区切り文字を指定する

フィールド区切り文字に「”」を指定してみると、結果は下記のようになります。

echo 1″2″3″4 | awk -F'[“]’ ‘{print $2, $4}’
2 4

 

jsonの値の取得

元々やりたかったawkでjsonの値を取得する方法をご紹介します。

 

下記のようなJSONファイルがあると仮定します。

$ cat tel.json

{
    “Taro”: “08012121111”,
    “Jiro”: “09012122222”,
    “Saburo”: “09012123333”
}

 

Jiroの値“09012122222”が欲しいとき、次のコマンドで抽出できます。

awk -F'[“]’ ‘/”Jiro”/{print $4}’ tel.json

太文字部分の「/”Jiro”/」を付けることで、Jiroを含む行を抽出しています。

 

JSONファイルがminifyされている場合

組み込み変数RSを使用して、レコードの区切り位置を変更します。

 

下記のようなJSONファイルがあると仮定します。

$ cat tel.json

{“Taro”: “08012121111”,“Jiro”: “09012122222”,“Saburo”: “09012123333”}

 

1行ずつ読み込めない場合は、レコードの区切り位置を指定します。

RSを使用することで、区切り文字を設定できます。

今回は、JSONファイルの区切りである「,」を区切り文字として設定します。

awk -F'[“]’ -v RS=, ‘/”Jiro”/{print $4}’ tel.json

 

最後に

awkコマンドは他にも色々な使用方法があり、テキストの成形には知っていて損はないコマンドだと思います。

JSONの操作にはjqコマンドも便利そうですので、また機会があったらまとめてみたいと思います!

コメント