簡體   English   中英

在bash shell中管道和重定向

[英]Piping and redirect in bash shell

我想創建一個腳本,該腳本將通過管道輸出任何命中的輸出(此腳本將始終是最后一個運行的腳本),將其保存到臨時文件中,然后刪除該臨時文件作為腳本的最后一行。

例:

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

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

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

要么

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

等等...

腳本將數據抓取為名為moo的文件后,將按以下方式對其進行處理

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

作為最后一行?

默認情況下,“ awk”實用程序從standard in讀取,因此您可以將其放在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

暫無
暫無

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

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