尝试对单个巨大源文件执行两个操作以提高性能

尝试对单个巨大源文件执行两个操作以提高性能

我正在一个 Linux 命令中执行两个操作。操作是:

  1. 将数据从源文件发送到新的目标文件。

  2. 计算源文件中的记录数。

例如:源文件: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

相关内容