简体   繁体   English

将awk放入函数中

[英]Putting awk in a function

I have 4 awks that are really similiar so I want to put them in a function. 我有4个类似的awks,所以我想将它们放在一个函数中。 My awk code is... 我的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"

So the pattern and regular expression differ. 因此,模式和正则表达式不同。 How can I put this awk in a function where I can replace pattern with $1 and /([01])/ with $2 if I already use those in my awk? 如果我已经在awk中使用了awk,该如何将awk放入一个函数中,该函数可以将模式$ 1和/([[01])//替换为$ 2?

EDIT: I was thinking I can do... 编辑:我以为我可以...

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

then call with printFmt set? 然后调用printFmt设置?

    }

Not sure where the problem is since you already have in your code exactly what you need to do but maybe this will help by simplifying it a bit: 不确定问题出在哪里,因为您的代码中已经完全有您需要做的事情,但这也许可以通过简化一点来帮助您:

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

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

$ ./tst.sh
foo
---
bar

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM