我正在运行一个脚本来解析可以由 MATLAB 调用或从命令行运行的文本电子邮件文件。脚本如下所示:
#!/bin/bash
MYSED=/opt/local/bin/gsed
"$MYSED" -n "/X-FileName/,/*/p" | "$MYSED" "/X-FileName/d" | "$MYSED" "/\-Original Message\-/q"
如果我cat message_file | ./parser.sh
在终端窗口中运行,我会得到一个解析的文本文件。如果我system
在 MATLAB 中使用命令执行相同操作,我偶尔会得到相同的解析文本,然后是错误消息
cat: stdout: Broken pipe
当我使用sed
命令而不是cat
命令时,我收到了相同的错误消息。这可能发生在我正在解析的 1% 的文件上,几乎总是Original Message
在行后删除很多文件的大文件。当我不包含最后一个管道时,我没有收到错误消息,即删除“原始消息”之后的所有内容的管道。
如果可能,我想禁止来自 cat 的错误消息。理想情况下,我想了解为什么通过 MATLAB 运行脚本会给我一个错误,而在终端中运行它却不会?由于它往往发生在较大的文件上,我猜它与内存限制有关,但“断管”是一个模糊的错误消息,我无法确定。任何关于这两个问题的提示将不胜感激。
我可能可以在 MATLAB 之外运行脚本并保存处理过的文件,但由于某些文件很大,我现在宁愿不复制它们。