在bash中,有多种方法可以直接输入和输出。例如,这些命令执行相同的操作:
sort <input_file >output_file
cat input_file | sort >output_file
一般来说,我更喜欢第二种方式,因为我更喜欢我的命令从左到右阅读。
但this question的回答是:
“sort”可以使用临时文件来处理大于内存的输入文件
这让我想知道,在对大文件进行排序时,如果cat
会使该过程短路。
将输出传递给其他命令时,是否可以使用cat
创建问题?
答案 0 :(得分:3)
有一个术语我扔了很多叫Useless Use of Cat (UUoC)而第二个选项就是这个。当实用程序可以使用重定向对STDIN(例如sort
)进行输入时,不仅可以节省对cat
等外部进程的额外调用,还可以防止管道的开销。
除了额外的流程和管道之外,我看到的唯一其他“问题”就是管道缓冲。
显然,甚至还有一个致力于发布UUoC Award
的网站答案 1 :(得分:2)
“我更喜欢我的命令从左到右阅读”
<input_file sort >output_file
(写这个的规范方式当然是sort input_file >output_file
。)
答案 2 :(得分:2)
'sort'命令处理大文件,无论输入是通过标准输入和管道或I / O重定向到达,还是直接在命令行上命名。
请注意,您可以(也可能应该)写:
sort -o output_file input_file
即使输入和输出文件相同(或者如果您有多个输入文件,其中一个也是输出文件),这将正常工作。
我看到SiegeX已经把你带到虐待猫科动物虐待的任务,因为它也是众所周知的。我会支持他的努力。有时候使用cat
是合适的。适合的时间少于经常被认可的次数。
适当使用的一个示例是使用tr
命令和多个数据源:
cat "$@" | tr ...
这是必要的,因为tr
只读取其标准输入,只写入其标准输出 - 最终的'纯过滤'程序。
Unix的作者也注意到了'cat inputs |的通用目的使用命令'construct而不是更专业的输入重定向(引用缺失 - 手头不需要书籍)。