I had a need to extract the value of a particular string field in a JSON file. There were a lot of files and I wanted to process them all so I could use that value in a bash script:
#!/bin/bash
# arg: filename
# return: contents of file without \n
function build_file
{
while read line
do
str="$str $line"
done < $1
echo $str
}
# first arg: filename
# second arg: field
function extract_field
{
text=`build_file $1`
regex='"'$2'":\s*"([^"]*)"'
if [[ $text =~ $regex ]]; then
echo ${BASH_REMATCH[1]}
else
echo "$2 not found in $1"
fi
}
# change this value to that of your field-name
field=docid
for f in *.json; do
echo `extract_field $f $field`
done
You run this script in a directory where there are .json files. It then prints out the value of that field (minus the quotes) or an error message. Change the "docid" line to the name of your desired field.
No comments:
Post a Comment