Awk 多个表达式的问题

Awk 多个表达式的问题

任何人都可以帮助我下面的代码背景有什么问题:-我有一个带有标题的固定宽度文件,我正在尝试计算文件中的空值。我有一个空模式 $col_null_patt=\s ,然后我尝试使用列开始和column_length从文件中对列进行子串并尝试进行正则表达式匹配

问题 :-

awk: cmd. line:1: BEGIN {m = ENVIRON["RE"]} c=substr($0,m,p);if($n ~ "^" m "$"{N++} END{print N+0}
awk: cmd. line:1:                                            ^ syntax error

代码如下

 thres=$( RE="$col_null_patt" 
           awk  -v m="$col_start" -v p="$col_len" 
           'BEGIN {n= ENVIRON["RE"]} 
            c=substr($0,m,p);
            if(NR >1 && c ~ "^" n "$"{N++} END{print N+0}' "$cp_input")

答案1

thres=$(
  RE="$col_null_patt" awk -v m="$col_start" -v p="$col_len" '
    # condition                action
    BEGIN                      {re = ENVIRON["RE"]} 
                               {c = substr($0,m,p)}
    NR > 1 && c ~ "^(" re ")$" {N++}
    END                        {print N+0}
    ' < "$cp_input"
)
  • 您需要VAR=value awk...VAR环境变量传递给awk.使用VAR=value␤awk,您只需定义一个$VARshell 变量,然后调用awk(并且仅在事先导出的情况下VAR才位于 的环境中)awk
  • awk请记住遵循模式中的语句condition { action }。如果要c=substr($0,m,p)对每个输入记录执行,则需要将其放在带有条件部分的操作部分中,条件部分的计算结果为 true 或不带有条件部分。

无论如何,请注意\s(表示任何一个空白字符)不是标准的,并且很少有 awk 实现能够理解。col_null_patt='[[:space:]]'将是标准的并且更便携。或者col_null_patt='[[:space:]]*'匹配任意数量(包括空)的空格。

相关内容