我正在使用sed'w'命令从TeX文档中获取标签:
/\\label{[a-zA-Z0-9]*}/w labels.list
此脚本是管道的一部分,稍后,awk将读取刚刚编写的sed文件。 e.g
cat bob | sed -f sedScript | awk -f awkScript labels.list -
有时管道产生正确的输出,有时它不产生(对于完全相同的输入文件'bob')。这是随机的。
我只能得出结论,有时awk会在sed正确关闭之前尝试读取文件。无论如何我可以强制sed在脚本结束时关闭文件,或者有什么其他建议可以解决问题吗?
答案 0 :(得分:0)
管道中的所有阶段并行运行。这是管道的一个非常重要和定义的特征,没有什么可以或应该尝试做以防止或绕过它。
相反,您应该重写脚本,以便按照您需要的顺序执行和完成所有数据依赖项。在一般情况下,你做
cat bob | sed -f sedScript > tempfile
cat tempfile | awk -f awkScript labels.list -
或等同于您的情况:
grep '\\label{[a-zA-Z0-9]*}' bob > labels.list
awk -f awkScript labels.list bob