我有一个非常大的对象流,我试图将其导入MongoDB。在大约10k个对象之后我不断收到破损的管道,所以我希望能够更新我的导入脚本以跳过已导入的对象,并从第一个错过的对象开始。
在我看来,这个工具将是jq。我需要的是一种在 n 之前跳过(产生空)所有项目的方法,然后按原样输出其余项目。
我已经尝试使用foreach来维护一个对象计数器,但是对于我的小测试样本中的所有对象(在这里使用bash文档),我一直以1作为计数器的值结束:
$ jq 'foreach . as $item (0; (.+1); [ . , if . < 2 then empty else $item end ])' <<"end"
> { "item": "first" }
> { "item": "second" }
> { "item": "third" }
> { "item": "fourth" }
> end
这个输出是:
[
1
]
[
1
]
[
1
]
[
1
]
欢迎任何建议。
答案 0 :(得分:3)
def skip(n; stream):
foreach stream as $s (0; .+1; select(. > n) | $s);
示例:
skip(1000; inputs)
(使用inputs
和/或input
时,不要忘记您可能希望使用-n命令行选项。)
try (range(0; 1000) | input | empty), inputs
在这种情况下,try
是必要的,以避免错误,如果少于请求的项目数。