在 bash 外壳中管道和重定向



我想创建一个脚本,该脚本获取任何命中它的管道输出(此脚本将始终是最后一个脚本运行),将其保存到临时文件,然后删除临时文件作为脚本的最后一行。

例:

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    Modeln" } {print}  END{ print "total lines: " NR}'

是否允许然后添加

rm -r filepathtowhereismoo

作为最后一行?

默认情况下,'awk' 实用程序从标准输入读取,所以你可以把它放在一个 shell 脚本中:

#!/bin/bash
awk 'NR%20==0 {print "nYear  Eng Disp. Cyl  City FE  Hwy FE    Modeln" } {print}  END{ print "total lines: " NR}'

您甚至可以编写一个可执行的awk脚本并管道到该脚本:

#!/usr/bin/awk
NR%20==0 {
  print "nYear  Eng Disp. Cyl  City FE  Hwy FE    Modeln"
} 
{
  print
}
END { 
  print "total lines: " NR
}

使用这种方法,听起来好像您不需要任何类型的临时文件。 但是,如果您这样做了,您也可以这样做:

#!/bin/bash
cat > /tmp/tmpfile.txt
# Do some things with the file.
rm /tmp/tmpfile.txt

相关内容

  • 没有找到相关文章

最新更新