Linux 我想通过管道将输出传输到bash中的多个文件

Linux 我想通过管道将输出传输到bash中的多个文件,linux,bash,awk,suse,tee,Linux,Bash,Awk,Suse,Tee,我查了一下如何做,但不知道如何使用tee。这有点混乱,因为我使用的是awk的输出。以下是我到目前为止所做的:(请记住,我是一个初学者) 我不知道为什么awk的输出没有打印在文本文件中。使用awk-v name=value选项将shell变量传递给awk: num1=2 num2=4 awk -v n1=$num1 -v n2=$num2 'BEGIN {if (n1 == n2) print "hello"; else print "Goodbye"}' | tee file1.txt 要

我查了一下如何做,但不知道如何使用
tee
。这有点混乱,因为我使用的是
awk
的输出。以下是我到目前为止所做的:(请记住,我是一个初学者)


我不知道为什么
awk
的输出没有打印在文本文件中。

使用
awk-v name=value
选项将shell变量传递给awk:

num1=2
num2=4
awk -v n1=$num1 -v n2=$num2 'BEGIN {if (n1 == n2) print "hello"; else print "Goodbye"}' 
 | tee file1.txt
要从
awk
自身重定向输出:

awk -v n1=$num1 -v n2=$num2 'BEGIN {
    if (n1 == n2) print "hello"; else print "Goodbye"}' > output.txt

使用
awk-v name=value
选项将shell变量传递给awk:

num1=2
num2=4
awk -v n1=$num1 -v n2=$num2 'BEGIN {if (n1 == n2) print "hello"; else print "Goodbye"}' 
 | tee file1.txt
要从
awk
自身重定向输出:

awk -v n1=$num1 -v n2=$num2 'BEGIN {
    if (n1 == n2) print "hello"; else print "Goodbye"}' > output.txt

您的awk命令有语法错误@阿努巴瓦已经给了你一个解决办法

为了演示
tee
,让我们做一些简单的事情:

$ date | tee file1.txt file2.txt
Thu Jun 12 10:44:26 EDT 2014
$ cat file1.txt
Thu Jun 12 10:44:26 EDT 2014
$ cat file2.txt
Thu Jun 12 10:44:26 EDT 2014
总而言之:调用
tee
很好。您的输出文件不包含任何文本,因为您的
awk
程序只将其错误消息打印到stderr,而没有打印到stdout。如果希望awk的所有输出都进入文件,请将awk的stderr重定向到stdout:

awk '...' 2>&1 | tee ...

我将把这个解释留作练习

您的awk命令有语法错误@阿努巴瓦已经给了你一个解决办法

为了演示
tee
,让我们做一些简单的事情:

$ date | tee file1.txt file2.txt
Thu Jun 12 10:44:26 EDT 2014
$ cat file1.txt
Thu Jun 12 10:44:26 EDT 2014
$ cat file2.txt
Thu Jun 12 10:44:26 EDT 2014
总而言之:调用
tee
很好。您的输出文件不包含任何文本,因为您的
awk
程序只将其错误消息打印到stderr,而没有打印到stdout。如果希望awk的所有输出都进入文件,请将awk的stderr重定向到stdout:

awk '...' 2>&1 | tee ...

我将把这个解释留作练习

管道输出到
tee
将输出写入您指定的文件,并将输出写入stdout。因此,如果要将输出写入多个文件,可以通过管道连接到另一个
tee
,如下所示:

bbbco $ echo "hello world" | tee /tmp/helloworld1.txt | tee /tmp/helloworld2.txt
hello world

bbbco $ cat /tmp/helloworld1.txt 
hello world

bbbco $ cat /tmp/helloworld2.txt 
hello world

管道输出到
tee
会将输出写入指定的文件,并将输出写入标准输出。因此,如果要将输出写入多个文件,可以通过管道连接到另一个
tee
,如下所示:

bbbco $ echo "hello world" | tee /tmp/helloworld1.txt | tee /tmp/helloworld2.txt
hello world

bbbco $ cat /tmp/helloworld1.txt 
hello world

bbbco $ cat /tmp/helloworld2.txt 
hello world

如果将管道移到T形三通,是否会得到任何输出?@AndyLester是的,但我只能将输出重定向到file1.txt。没有任何内容输出到文件2。txtAwk没有生成输出,因为您没有给它任何输入。脚本wrt的目的是什么?它从哪里获得输入?千万不要用这些awk变量来做你正在做的事情,它很容易受到潜在错误的影响。默认情况下使用
-v
,有关详细信息,请参阅。如果将管道移到T形三通,是否会获得任何输出?@AndyLester是,但我只能将输出重定向到file1.txt。没有任何内容输出到文件2。txtAwk没有生成输出,因为您没有给它任何输入。脚本wrt的目的是什么?它从哪里获得输入?千万不要用这些awk变量来做你正在做的事情,它很容易受到潜在错误的影响。默认情况下使用
-v
,有关详细信息,请参阅。我还希望输出转到file2.txt。我用你的解决方案试过了,但它不起作用。你的awk命令只是在输出中写入
再见
,这是你想要的吗?是的,因为这是一个测试。我正在做一些类似的工作,因此如果这起作用,那么我的问题将得到解决是的,它会起作用,但输出只存储在file1.txt中,而不是file2.txt
tee file1.txt file2.txt>/dev/null
我还希望输出转到file2.txt。我用你的解决方案试过了,但它不起作用。你的awk命令只是在输出中写入
再见
,这是你想要的吗?是的,因为这是一个测试。我正在做一些类似的工作,因此如果这起作用,那么我的问题将得到解决是的,它会起作用,但输出只存储在file1.txt中,而不是file2.txt
tee file1.txt file2.txt>/dev/null