awk 프로그램의 다른 if 문 내에서 여러 if 문을 사용하는 방법은 무엇입니까?

awk 프로그램의 다른 if 문 내에서 여러 if 문을 사용하는 방법은 무엇입니까?

CSV 파일이 있는데 CSV 파일에서 데이터를 검색하기 위해 여러 번 확인하고 싶습니다. 나는 다음과 같은 조건을 알고 있어야 하며, 쉘 스크립트에서 awk를 사용하여 만족시키려고 합니다.

if ( ColD == "TRX" || ColD == "TX" )
{
   if (ColJ == "BTS INT UNAFF" || ColJ == "LOCAL MODE")
   {
      if (ColL !="OPER" && ColL != "") #Second Value shouldn't be blank
      {
         if (ColU != "2000")
         {
             if (ColA != "*_*") # Should not contain _ in the value.
             then
                   print all the resulting filtered columns of this csv file

여기서 ColA, ColB 등은 $1, $2 등으로 사용하는 열 번호입니다.

이제 단일 if 조건의 간단한 awk 사용법이 다음과 같다는 것을 알고 있습니다.

awk -F, '{
                if ($23 == "TOP36")
                print $11
            }' $INPUT_PATH/$fileName

그리고 중첩된 if 조건은 다음과 같이 찾을 수 있습니다.

awk '
{if ( $6 == 0 && $8 > 0 && $8 <= 9 ) { $6 = "left" } else {
  if ( $8 == 0 && $6 > 0 && $6 <= 15 ) { $6 = "bottom" } else {
    if ( $8 == 9 && $6 > 0 && $6 <= 15 { $6 = "top" } else {
      if ( $6 == 15 && $8 > 0 && $8 <= 9 { $6 = "right" }
      }
    }
  }
} {print}'

하지만 위에서 만족하는 if 조건을 넣고, 아래에 등등을 넣으면 내 조건이 만족될 수 있을 것 같아요. awk if 문을 사용하여 이 작업을 어떻게 수행할 수 있나요? 더 좋은 방법이 있나요?

답변1

중첩됨if성명효과적으로 성명서 and성명서따라서 중첩을 단계별로 진행할 때 특정 처리를 수행할 필요가 없으면 모두 연결하면 됩니다 &&.

  awk '{ if( ( $4 == "TRX" || $4 == "TX" ) &&
             ( $10 == "BTS INT UNAFF" || $10 == "LOCAL MODE" ) && 
             ( $12 != "OPER" && $12 != "" ) && # Second Value should not be blank
             ( $22 != "2000") &&
             ( !match( $1, "_") ) ) # Should not contain _ in the value.
           { print } 
       }' FS=, file

필드 구분 기호를 정의하려면 다음을 사용할 수 있습니다.옵션-F,바꾸다범위FS=,또는 원하는 경우 코드의 파일 전처리 블록으로 완전히 래핑합니다 awk.BEGIN{ }BEGIN{ FS="," }

관련 정보