使用 jq 处理 bash 中的 JSON 文件
processing JSON file in bash using jq
我有一个bash脚本
counter=0
for file in /home/ec2-user/Workspace/events_parts/*
do
counter=$[counter + 1]
event=$(cat $file | jq '.Event')
echo $event
if [ "$event" = "Time Exceeded" ] || [ "$event" = "Load Time" ]; then
echo "Coming Here"
jq ".url = \"$(jq '.Message' $file | sed 's/.*proxy=\([^&]*\).*//')\"" $file
else
jq ".url = null"
fi
done
~
在上面的 bash 脚本中,我试图从 JSON 文件中提取 Event
字段并检查两个可能的值。if [ "$event" = "Time Exceeded" ] || [ "$event" = "Load Time" ];
不起作用,因为我会期待。我已经验证我正在比较的值确实存在。
检查一次 cat $file | jq '.Event'
:
的输出中是否有前导或尾随不需要的字符(空格、换行符...)
cat $file | jq '.Event' | hexdump -C
更新:
替换
[ "$event" = "Time Exceeded" ]
来自
[ "$event" = "Time Exceeded." ]
或替换为
[ "${event%.}" = "Time Exceeded" ]
或替换为
[[ "$event" =~ "Time Exceeded" ]]
匹配一个子字符串。 ${event%.}
裁剪尾随 .
。
我有一个bash脚本
counter=0
for file in /home/ec2-user/Workspace/events_parts/*
do
counter=$[counter + 1]
event=$(cat $file | jq '.Event')
echo $event
if [ "$event" = "Time Exceeded" ] || [ "$event" = "Load Time" ]; then
echo "Coming Here"
jq ".url = \"$(jq '.Message' $file | sed 's/.*proxy=\([^&]*\).*//')\"" $file
else
jq ".url = null"
fi
done
~
在上面的 bash 脚本中,我试图从 JSON 文件中提取 Event
字段并检查两个可能的值。if [ "$event" = "Time Exceeded" ] || [ "$event" = "Load Time" ];
不起作用,因为我会期待。我已经验证我正在比较的值确实存在。
检查一次 cat $file | jq '.Event'
:
cat $file | jq '.Event' | hexdump -C
更新:
替换
[ "$event" = "Time Exceeded" ]
来自
[ "$event" = "Time Exceeded." ]
或替换为
[ "${event%.}" = "Time Exceeded" ]
或替换为
[[ "$event" =~ "Time Exceeded" ]]
匹配一个子字符串。 ${event%.}
裁剪尾随 .
。