任何人都可以帮助我下面的代码背景有什么问题:-我有一个带有标题的固定宽度文件,我正在尝试计算文件中的空值。我有一个空模式 $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=valueawk
,您只需定义一个$VAR
shell 变量,然后调用awk
(并且仅在事先导出的情况下VAR
才位于 的环境中)awk
awk
请记住遵循模式中的语句condition { action }
。如果要c=substr($0,m,p)
对每个输入记录执行,则需要将其放在带有条件部分的操作部分中,条件部分的计算结果为 true 或不带有条件部分。
无论如何,请注意\s
(表示任何一个空白字符)不是标准的,并且很少有 awk 实现能够理解。col_null_patt='[[:space:]]'
将是标准的并且更便携。或者col_null_patt='[[:space:]]*'
匹配任意数量(包括空)的空格。