从文件

时间:2018-02-07 23:22:04

标签: json bash

我试图编写一个读取.txt文件所有行的脚本。每行都是有效的JSON,其字段为:saddrdata。我想获得字节大小(wc -c),但不能这样做。

while IFS='' read -r line || [[ -n "$line" ]]; do
echo $line |
jq -r '.data' |
bytes=$(wc -c)
if (( $bytes > 200 )); then
    echo $bytes
fi                                                                       
done< "testear.txt"

示例testear.txt

{ "saddr": "157.130.222.66", "data": "9f00032a30000000" }

1 个答案:

答案 0 :(得分:1)

您尝试使用以下命令在管道中设置bytes

echo $line | jq -r '.data' | bytes=$(wc -c)

但是,管道中的命令是在子shell中运行的,因此在那里设置的环境变量在顶级shell中不可用。

相反,试试这个:

bytes=$(echo "$line" | jq -r '.data' | wc -c)

- 以便您在顶级shell设置bytes