首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash管与壳体展开

Bash管与壳体展开
EN

Stack Overflow用户
提问于 2015-10-04 12:08:30
回答 1查看 72关注 0票数 0

我已经将bash管道中的数据源从cat ${file}更改为cat file_${part_number},因为预处理导致${file}在2GB处被截断,分割输出消除了预处理问题。但是,在测试此更改时,我无法确定如何让Bash继续对用于测试管道的一些基本操作执行相同的操作。

我最初的管道是:

代码语言:javascript
复制
cat giantfile.json | jq -c '.' | python postprocessor.py

使用原始管道,如果我正在测试对postprocessor.py或预处理器的更改,并且只想用来自giantfile.json的几个项测试我的更改,我可以只使用headtail。就像这样:

代码语言:javascript
复制
cat giantfile.json | head -n 2 - | jq -c '.' | python postprocessor.py
cat giantfile.json | tail -n 3 - | jq -c '.' | python postprocessor.py

修复预处理器问题的新管道是:

代码语言:javascript
复制
cat file_*.json | jq -c '.' | python postprocessor.py

这很好,因为每个文件最终都会得到输出。然而,我不想等待5-10分钟的每次测试。我试着用头输入的前2行进行测试。

代码语言:javascript
复制
cat file_*.json | head -n 2 - | jq -c '.' | python postprocessor.py

巴什坐在那里工作的时间远远超过了它应该做的时间,所以我试着:

代码语言:javascript
复制
cat file_*.json | head -n 2 - | jq -c '.'

我的问题很明显。Bash输出所有文件的内容,就好像head甚至不在那里一样,因为每个文件现在都有1行数据。我以前从来没必要用bash做过这件事,而且我很困惑。

为什么会这样做,以及如何重写命令管道,使之像以前那样工作,允许我选择用于测试的第一行/最后n行数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-04 12:17:51

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

如果文件实际上是一行,每一行都有一个终止换行符,那么通过head -n 2的管道应该可以正常工作。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32933288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档