在命令行/母脚本中覆盖awk脚本中的变量

时间:2014-06-27 19:14:34

标签: bash variables awk overwrite

如果我们有这样的awk脚本(average.sh)并且想用它来处理很多输入文件

awk -F\" 'BEGIN{print}            
  last != $4""$8 && last{     
      print line,exp(C/D)     
      C=D=0}                  
  { # This block process each line of infile
   C += log($(NF-1)+0)        
   D++                        
   $(NF-1)=""                 
   line=$0                    
   last=$4""$8}               
  END{ # This block triggers after the complete file read
       # to print the last average that cannot be trigger during
       # the previous block
      print line,exp(C/D)}' ${var2:=infile}

现在,如果我们这样做

export var2="infile4" | sh average.sh

“average.sh”仍然处理“infile”而不是“infile4”。

按照override variable in bash script from command line中的最佳答案,我们尝试

var2=infile4 ./geometric_average_real

这会导致错误“var2 = infile:Command not found。”

我们的最终目标是编写循环

for (X=1; X<=3; X++)

do

sh average.sh infile${X}

done

所以这个循环应该处理

sh average.sh infile1
sh average.sh infile2
sh average.sh infile3

感谢您的评论!

1 个答案:

答案 0 :(得分:1)

如果您的average.sh脚本适用于单个infile,那么只需从另一个脚本中调用它,其中包含您要处理的文件列表:

#!/bin/bash

test -n "$1" || { echo "error, insufficient input"; exit 1; }

avgscript="/path/to/average.sh"

test -x "$avgscript" || { echo "error: required script `$avgscript` not found or not executable"; exit 1; }

for i in "$@"; do

    avgscript "$i"

done

将该文件另存为runavg.sh,然后只需致电runavg.sh file1 file2 file2

相关问题