2015-10-04 109 views
0

我已将bash管道中的数据源从cat ${file}更改为cat file_${part_number},因为预处理导致${file}被截断为2GB,所以拆分输出消除了预处理问题。然而,在测试这种变化时,我无法弄清楚如何让Bash继续为我用来测试管道的一些基本操作采取相同的行动。Bash管道和Shell扩展

我原来的管道是:

cat giantfile.json | jq -c '.' | python postprocessor.py 

与原来的管道,如果我测试的变化postprocessor.py或预处理程序,我想只是测试我的变化有几个项目从giantfile.json我可以使用headtail。像这样:

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分钟。我试着用头部的前两行输入进行测试。

cat file_*.json | head -n 2 - | jq -c '.' | python postprocessor.py 

猛砸坐在那里,远远超过它应该工作,所以我尝试:

cat file_*.json | head -n 2 - | jq -c '.' 

而且我的问题是清楚的。 Bash正在输出所有文件的内容,就好像磁头不在那里一样,因为每个文件现在都有1行数据。我从来没有必要用bash来做这件事,而且我很尴尬。

为什么没有击行为这种方式,和如何我重写我的小bash命令管道的工作它曾经的样子,让我选择的第一个/最后ñ线数据与测试工作?

回答

2

我的猜测是,当你将json分成单独的文件时,你设法从每行的末尾删除换行符,结果是连接文件(cat file_json.*)实际上只有一行,因为cat不会在它连接的文件之间插入换行符。

如果这些文件实际上每行都带有一个终止换行符,则通过head -n 2的管道应该正常工作。

您可以使用wc来检查此假设,因为该实用程序会计算换行符而不是行。如果它报告文件有0行,那么你需要修复你的预处理。

+0

你钉了它。事实证明,我在预处理过程中有一个步骤,从它所处理的文件末尾剥离了直线。这不是只有一个文件的问题。但是当它是每个文件的一行数据时会引起我的问​​题。 – Techdragon