如何将管道中的多个输出添加到文件中?

如何将管道中的多个输出添加到文件中?

我正尝试用这个同时打印 4 种不同的东西。

wc -l text.txt >processed.txt | cat text.txt | sort -r | tail -1 >>processed.txt | head -1 >>processed.txt | tail -5 | head -1 >>processed.txt

我的问题是它只将第一个 > 命令输出到文件,其余的都被忽略了,我试过移动它们,但无济于事。我会逐行执行 4 个输出,但这是因为它需要一行。

答案1

不要将其变成一个大管道:它看起来像是针对同一文件的 4 个独立操作。每个操作都需要访问原始文件内容。

wc   -l text.txt >processed.txt
sort -r text.txt | tail -1 >>processed.txt
head -1 text.txt >>processed.txt
tail -5 text.txt | head -1 >>processed.txt

或者,将命令组合在一起并进行 1 次重定向:

{
    wc   -l text.txt
    sort -r text.txt | tail -1
    head -1 text.txt
    tail -5 text.txt | head -1 
} >processed.txt

如果您在编写时需要将其放在一行上,请添加一些分号:

{ wc -l text.txt; sort -r text.txt | tail -1; head -1 text.txt; tail -5 text.txt | head -1; } >processed.txt

答案2

您可以考虑使用撒尿

<text.txt pee 'wc -l' 'sort -r | tail -1' 'head -1' 'tail -5 | head -1' >processed.txt

pee就好像tee对于命令

相关内容