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

问题描述 投票:1回答:3

我抬头看怎么做,但不知道如何使用tee 。 这有点令人困惑,因为我正在使用awk的输出。 这是我到目前为止的内容:(请记住,我是一个初学者)

num1=2
num2=4

awk 'if (/'$num1'/ == /'$num2'/) 
     {
         print "Hello"
     } 
     else  
     {
         print "Goodbye" 

     }' | tee file1.txt file2.txt

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

linux bash awk suse tee
3个回答
3
投票

您的awk命令包含语法错误。 @anubhava已为您解决了这一问题。

为了演示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 ...

我将把这个解释留作练习


1
投票

使用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

0
投票

将输出管道传输到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
© www.soinside.com 2019 - 2024. All rights reserved.