带有可选参数的 awk 函数

带有可选参数的 awk 函数

ngt这是允许awk 函数使用可选用户参数的好方法吗?

function nbstring(str, ngt) {
  ## Test whether string STR is non-blank.
  ## Return true when STR is non-blank.
  if (length(gensub(/[[:blank:]]+/, "", "g", str)) > 0) {
   if ( ngt == "dump" ) { print "return 1 for " str }
   return 1
  } else {
   if ( ngt == "dump" ) { print "return 0 for " str }
   return 0
  }
 }

我也用过这个条件

if (str && length(gensub(/[[:blank:]]+/, "", "g", str)) > 0) {

我得到了相同的结果。

所以我觉得没str &&必要做吧?

答案1

您只是想测试字符串是否包含非空格吗?在任何 POSIX awk 中都是这样(不需要非 POSIX gensub(),也不需要任何其他*sub()函数,也不需要调用length()):

function nbstring(str, ngt,    rslt) {
  ## Test whether string STR is non-blank.
  ## Return true when STR is non-blank.
  rslt = ( str ~ /[^[:blank:]]/ ) 
  if ( ngt == "dump" ) {
    printf "return %d for %s\n", rslt, str
  }
  return rslt
}

答案2

如果您正在寻找惯用的awk代码,我可以提供这个,但这与您自己的建议并没有太大不同,

function nbstring(str, ngt,  x) {
    x = (length(gensub(/[[:blank:]]+/, "", "g", str)) > 0);
    if (ngt == "dump") { printf "return %d for < %s >\n", x, str };
    return x;
}

您可以调用nbstring(str, ngt)or nbstring(str),或者实际上是nbstring(),因为函数不计算参数。

相关内容