把awk放在一个函数中

时间:2015-07-07 15:25:40

标签: bash shell awk

我有4个非常类似的awks,所以我想把它们放在一个函数中。我的awk代码是......

awk -v MYPATH="$MYPATH" -v FILE_EXT="$FILE_EXT" -v NAME_OF_FILE="$NAME_OF_FILE" -v DATE="$DATE" -v pattern="$STORED_PROCS_BEGIN" '
        $0 ~ pattern {
            rec = $1 OFS $2 OFS $4 OFS $7
            for (i=9; i<=NF; i++) {
                rec = rec OFS $i
                if ($i ~ /\([01]\)/) {
                    break
                }
            }
            print rec >> "'$MYPATH''$NAME_OF_FILE''$DATE'.'$FILE_EXT'"
        }
    ' "$FILE_LOCATION"

因此模式和正则表达式不同。我如何将这个awk放在一个函数中,我可以用$ 1替换模式和/([01])/ $ 2,如果我已经在我的awk中使用了那些?

编辑: 我以为我能做到......

 printFmt(){
   awk -v .......
     $0 ~ patten {
        rec..
        for..
           rec..
           if($i ~ search) 
              break
 print rec

然后用printFmt set调用?

    }

1 个答案:

答案 0 :(得分:3)

不确定问题出在哪里,因为你已经在代码中准确地知道了你需要做什么但是这可能有助于简化它:

$ cat tst.sh
function prtStuff() {
    awk -v x="$1" 'BEGIN{ print x }'
}

prtStuff "foo"
prtStuff "---"
prtStuff "bar"

$ ./tst.sh
foo
---
bar