如果GAWK中的陈述给出错误

时间:2014-06-11 14:14:00

标签: awk gawk

我有这段代码:

gawk '{if (match($5,/hola/,a) && $6=="hola") {print $2"\t"$1"\t"$2"\t"$1"\t"$3} else if `(match($5,/(_[joxT]+\.[0-9]*)/,a) && match($6,/(_[joxG]+\.[0-9]*)/,b)) {print $2""a[1]"\t"$1""b[1]} else (match($5,/(_[joxT]+\.[0-9]*)/,a) && $6=="hola") {print "hola"}}' pasted`

我收到了这个错误:

gawk: cmd. line:1: {if (match($5,/hola/,a) && $6=="hola") {print $2"\t"$1"\t"$2"\t"$1"\t"$3} else if (match($5,/(_[joxT]+\.[0-9]*)/,a) && match($6,/(_[joxG]+\.[0-9]*)/,b)) {print $2""a[1]"\t"$1""b[1]} else (match($5,/(_[joxT]+\.[0-9]*)/,a)) {print $1}}
gawk: cmd. line:1:                                                                                                                                                                                                                               ^ syntax error

你知道错误在哪里吗?

感谢。

2 个答案:

答案 0 :(得分:3)

怜悯下一个人来维护你的代码和缩进。并非每个程序都需要在一行中表达。

gawk '
    BEGIN {OFS = '\t'}
    {
        if ($5 ~ /hola/ && $6 == "hola") {
            print $2, $1, $2, $1, $3
        } 
        else if (match($5, /(_[joxT]+\.[0-9]*)/, a) && match($6, /(_[joxG]+\.[0-9]*)/, b)) {
            print $2 a[1], $1 b[1]
        } 
        else if ($5 ~ /(_[joxT]+\.[0-9]*)/ && $6 == "hola") {
            print "hola"
        }
    }
' pasted

此处,只有在需要捕捉部分匹配时才使用match()

答案 1 :(得分:-3)

gawk '{if (match($5,/hola/,a) && $6=="hola") {print $2"\t"$1"\t"$2"\t"$1"\t"$3} else if `(match($5,/(_[joxT]+\.[0-9]*)/,a) && match($6,/(_[joxG]+\.[0-9]*)/,b)) {print $2""a[1]"\t"$1""b[1]} else if (match($5,/(_[joxT]+\.[0-9]*)/,a) && $6=="hola") {print "hola"}}' pasted`