我正在尝试从许多对象的大型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
答案 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