使用带头的awk时如何解决“断管”错误


1

我从一个执行类似命令的命令中得到了管道错误:

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

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

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


请使用以下方式回答您的问题 回答你的问题 你可以尽快按下!然后你甚至可以获得它的声誉并接受它。
slhck

我会,但作为一个新用户,我不能为另一个用户...显然是5个小时。我想把答案写下来,所以我没有忘记。
Jon

Answers:


0

来自OP的解决方案, 修订版2


事实证明我很愚蠢。

首先,没有必要让awk将路径添加到每个文件中,只是为了抛弃大部分文件。所以awk语句应该是最后一个管道。

其次,不是用ls反转排序,我们可以做一个标准的时间排序,并使用tail来提取我们所追求的线。这确保管道在整个过程中保持打开状态。

新命令看起来像:

ls -t1 /a/path | tail -n 50 | awk -F '\n' -vpath=/prepend/path/ '{print path$1}'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.