【初心者】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
[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

新しいLinuxの教科書 第2版 [ 三宅 英明 ]
価格:3,300円(税込、送料無料) (2024/8/27時点)


最後に

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

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

コメント