2014-03-03 124 views
0

我想創建一個腳本,它接受任何命中它的管道輸出(此腳本將始終是最後一次腳本運行),將其保存到臨時文件,然後將臨時文件刪除爲腳本的最後一行。在bash shell中管道和重定向

例子:

cat blah | ./scripta.sh | ./anotherscript.sh | ./yetanotherscript |./finalscript 

的問題是,我們並不總是同時運行的所有腳本。一旦它可能是這樣的:

cat blah | ./anotherscript.sh | ./finalscript.sh 

cat blah | ./anotherscript.sh | yetanotherscript.sh | ./finalscript.sh 

等等

劇本,之後它抓住該數據作爲文件名爲哞將處理像這樣

awk < moo 'NR%20==0 {print "\nYear Eng Disp. Cyl City FE Hwy FE Model\n" } {print} END{ print "total lines: " NR}' 

是否允許添加

rm -r \file\path\to\where\is\moo 

作爲最後一行嗎?

+0

這個問題不是很清楚。您想要將此命令添加到管道中的哪個腳本?爲什麼'moo'與'blah'不同? –

+0

我認爲這是一個非常糟糕的設計決定。您的腳本應該從標準輸入讀取並寫入標準輸出。只要。你需要確保你的腳本沒有那麼緊密 - 否則,它們應該是一個帶有運行功能選項的程序(或不是) –

回答

0

默認情況下,「AWK」工具從標準讀取,所以你可以把這個shell腳本:

#!/bin/bash 

awk 'NR%20==0 {print "\nYear Eng Disp. Cyl City FE Hwy FE Model\n" } {print} END{ print "total lines: " NR}' 

你甚至可以編寫一個可執行awk腳本和管道到:

#!/usr/bin/awk 

NR%20==0 { 
    print "\nYear Eng Disp. Cyl City FE Hwy FE Model\n" 
} 

{ 
    print 
} 

END { 
    print "total lines: " NR 
} 

使用此方法,聽起來好像您不需要任何類型的臨時文件。但是,如果你這樣做,你也可以這樣做:

#!/bin/bash 

cat > /tmp/tmpfile.txt 

# Do some things with the file. 

rm /tmp/tmpfile.txt 
+0

你的第一個腳本可以運行awk,而不需要'cat |',並且精確地相同的行爲(並且性能稍好)。 –

+0

好點,還補充說你可以編寫可執行的awk腳本。所有OP的好信息。 –