在shell脚本中插入多个变量

时间:2014-12-01 06:56:08

标签: json bash shell awk

我正在尝试从许多对象的大型JSON文件中生成多个输出文件,这些文件可以由$ var1标识。

我的'应用程序'将每个json对象中的数组拆分成多行文本,我可以用awk测试它以获取一段时间内的记录。

从一个长的$ var1列表中,修复$ unixtime1和$ unixtime2进行单次传递,bash FOR循环看起来会传递哪些变量?

cat data.json | grep $var1 | application | awk -F '$10 > $unixtime1 && $10 < $unixtime2' > $var1.txt

我可以使用jq来获取var1的列表,但由于大整数的jq限制,不能将jq用于整个操作。

jq -c .var1 data.json | sort | uniq -c

作为一个偶然的程序,我选择不修改我的“应用程序”来完成任务 - 但我很欣赏那里经验丰富的专业知识。

以下for循环执行第一位 - 但如何将时间戳作为变量引入?

test.txt
351779050870307
351889052023932

#! /usr/bin/env bash
for i in `cat test.txt`
do
cat data.json | grep $i | application | awk -F "\"*,\"*" '$10 > 1417251600000 && $10 < 1417338000000' > $i.txt
done

2 个答案:

答案 0 :(得分:1)

我认为这就是你要找的东西:

while IFS= read -r i
do
    grep "$i" data.json | application |
    awk -F '"*,"*' -v ut1="$unixtime1" -v ut2="$unixtime2" '$10 > ut1 && $10 < ut2' > "$i.txt"
done < test.txt

答案 1 :(得分:1)

对于那些在BASH以外的事情上有专长的人(像我一样) - 我希望它可以帮助你完成小脚本实验

以下是将多个变量插入包含循环并混合多个管道函数的bash脚本的示例 - 该示例包括用户提示,计算和列表(test.txt)作为输入的示例。 p>

while循环似乎比for循环更严格(来自上一个答案)(但在逻辑时查找vs)

awk函数的有趣语法来自前面的答案,但没有解释,但有效

#! /usr/bin/env bash
read -e -p "start time?" Unixtime1
Unixtime2=$(echo $Unixtime1 + 86400000 | bc)
while IFS= read -r i
do
grep "$i" data.json | application |
awk -F '"*,"*' -v ut1="$Unixtime1" -v ut2="$Unixtime2" '$10 > ut1 && $10 < ut2' > "$i.dat"
done < test.txt