我有一个JSON文件;name";作为密钥;url";作为另一个密钥。并不是JSON中的所有记录都具有";url";钥匙所以,当我试图写入文本时,它会被写为null。因此,我必须检查url键是否存在,如果存在,则必须将其写入2个输出文本文件。name将转到name.txt,url将转到url.txt
{ [ {"name": "a", url: "url1"}, {"name": "b"}, {"name": "C"} ] }
预期输出:
name.txt
a
url.txt
url
到目前为止我尝试了什么:
name=`hdfs dfs -cat $path | jq -r '.name'`
url=`hdfs dfs -cat $path | jq -r '.name'`
echo ${name} >> name.txt
echo ${url} >> url.txt
上面的问题是,如果找不到url,它会向输出文件写入一个null,并将等效名称写入name.txt文件。
当找不到url json标签时,如何跳过写入输出文件的记录
显然您首先需要select(.url)
。
同时调用hdfs和jq两次似乎有点奢侈。如果效率是一个问题,那么您可能希望将hdfs的结果保存到一个文件中,并调用jq两次,或者更好的做法是,在一个以调用awk来写入这两个文件结束的管道中,只调用hdfs和jq一次。