如何解决使用 awk 时出现“Broken Pipe”错误

如何解决使用 awk 时出现“Broken Pipe”错误

我从执行如下操作的命令中收到管道损坏错误:

ls -tr1 /a/path | awk -F '\n' -vpath=/prepend/path/ '{print path$1}' | head -n 50

本质上我想列出(使用绝对路径)目录中最旧的 X 文件。

似乎发生的情况是,输出是正确的(我得到 50 个文件路径输出),但是当 head 输出 50 个文件时,它会关闭 stdin,导致 awk 抛出管道损坏错误,因为它仍在输出更多行。

答案1

OP 的解决方案,修订版 2


首先,没有必要让 awk 在每个文件前面添加路径,然后将其大部分内容丢弃。因此 awk 语句应该是最后一个管道。

其次,我们可以进行标准时间排序,并使用 tail 提取我们想要的行,而不是使用 ls 进行反向排序。这可确保管道在整个过程中保持打开状态。

新的命令如下:

ls -t1 /a/path | tail -n 50 | awk -F '\n' -vpath=/prepend/path/ '{print path$1}'

相关内容