我正在一个 Linux 命令中执行两个操作。操作是:
将数据从源文件发送到新的目标文件。
计算源文件中的记录数。
例如:源文件:a.txt
,目标文件:b.txt
cat a.txt > b.txt; cat a.txt | wc -l
在上面的例子中,我从a.txt
两次中提取数据来执行这两个操作。但是,我的源文件非常大。因此,为了获得更好的性能,我试图找到一种方法,只从源文件中提取数据一次并执行这两个操作。
我怎样才能做到这一点?
答案1
tee
是您正在寻找的命令:
cat a.txt | tee b.txt | wc -l
另外,正如评论中所建议的,如果您想要更短的内容,您可以cat
完全避免使用并a.txt
直接重定向到tee
的 stdin:
tee b.txt < a.txt | wc -l
从手册页:
tee
- 从标准输入读取并写入标准输出和文件
答案2
要在一个文件中读取这两个操作,您可以执行以下操作:
awk '++c;END{print c >"/dev/stderr"}' <a.txt >b.txt
了解计数将来自stderr
。