hscript
hscript

Reputation: 5

Formating awk output to json using jq

I'm using grep to search for specific text inside multiple files.

grep -n -r "text_to_match" *

The output is:

john:15
Hana:11

After that, am using awk to print whatever meets my criteria of the condition

grep -n -r "text_to_match" * | awk -F '[:]' '{print $1,$2}'

I want now to use jq to have the following json document

{
  "data": [
    {
      "name": "john",
      "age": 15
    },
    {
      "name": "Hana",
      "age": 11
    }
  ]
}

I tried the following:

jq -R 'split(" ") | { file:.[0], start_line:.[1]}'

Output

{
  "name": "john",
  "age": 15
}
{
  "name": "Hana",
  "age": 11
}

Thank you

Upvotes: 0

Views: 979

Answers (1)

pmf
pmf

Reputation: 36296

As jq can also do the splitting, you could start before doing it with awk, having

john:15
Hana:11

Then, with -R you can read in the raw lines. Using -n in combination with [inputs] makes it an array. You can split using the / operator, and wrap everything in an object of your choice.

jq -Rn '{data: [inputs / ":" | {name: .[0], age: .[1]}]}'
{
  "data": [
    {
      "name": "john",
      "age": "15"
    },
    {
      "name": "Hana",
      "age": "11"
    }
  ]
}

Demo

Upvotes: 2

Related Questions