我已经将bash管道中的数据源从cat ${file}更改为cat file_${part_number},因为预处理导致${file}在2GB处被截断,分割输出消除了预处理问题。但是,在测试此更改时,我无法确定如何让Bash继续对用于测试管道的一些基本操作执行相同的操作。
我最初的管道是:
cat giantfile.json | jq -c '.' | python postprocessor.py使用原始管道,如果我正在测试对postprocessor.py或预处理器的更改,并且只想用来自giantfile.json的几个项测试我的更改,我可以只使用head和tail。就像这样:
cat giantfile.json | head -n 2 - | jq -c '.' | python postprocessor.py
cat giantfile.json | tail -n 3 - | jq -c '.' | python postprocessor.py修复预处理器问题的新管道是:
cat file_*.json | jq -c '.' | python postprocessor.py这很好,因为每个文件最终都会得到输出。然而,我不想等待5-10分钟的每次测试。我试着用头输入的前2行进行测试。
cat file_*.json | head -n 2 - | jq -c '.' | python postprocessor.py巴什坐在那里工作的时间远远超过了它应该做的时间,所以我试着:
cat file_*.json | head -n 2 - | jq -c '.'我的问题很明显。Bash输出所有文件的内容,就好像head甚至不在那里一样,因为每个文件现在都有1行数据。我以前从来没必要用bash做过这件事,而且我很困惑。
为什么会这样做,以及如何重写命令管道,使之像以前那样工作,允许我选择用于测试的第一行/最后n行数据?
发布于 2015-10-04 12:17:51
我的猜测是,当您将json拆分成单独的文件时,您成功地从每一行的末尾删除了换行符,其结果是连接文件(cat file_json.*)实际上总共只有一行,因为cat不会在它正在连接的文件之间插入新行。
如果文件实际上是一行,每一行都有一个终止换行符,那么通过head -n 2的管道应该可以正常工作。
您可以使用wc检查这一假设,因为该实用程序计算的是换行符而不是行。如果它报告文件有0行,那么您需要修复预处理。
https://stackoverflow.com/questions/32933288
复制相似问题