簡體   English   中英

我想將輸出管道傳輸到bash中的多個文件

[英]I want to pipe an output to multiple files in bash

我抬頭看怎么做,但不知道如何使用tee 這有點令人困惑,因為我正在使用awk的輸出。 這是我到目前為止的內容:(請記住,我是一個初學者)

num1=2
num2=4

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

     }' | tee file1.txt file2.txt

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

您的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 ...

我將把這個解釋留作練習

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

將輸出管道傳輸到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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM