선택적 매개변수가 있는 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()

관련 정보