如何在 awk 程序的另一个 if 语句中使用多个 if 语句?

Ank*_*tha 5 awk shell-script csv

我有一个 CSV 文件,我想进行多次检查以从 CSV 文件中检索数据。我有以下条件需要注意,我正在尝试在 shell 脚本中使用 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
Run Code Online (Sandbox Code Playgroud)

这里 ColA、ColB 等是我用作 $1、$2 等的列号。

现在我知道单个 if 条件的简单 awk 用法是这样的:

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

并且可以找到嵌套的 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}'
Run Code Online (Sandbox Code Playgroud)

但是,我认为如果我将满足一个 if 条件放在上面,然后在它下面放下一个,依此类推,我的条件就可以得到满足。我如何使用 awk if 语句来做到这一点?有一个更好的方法吗?

Pet*_*r.O 5

嵌套if语句实际上是 语句and语句,因此如果您在逐步执行嵌套时不需要进行任何特定处理,那么您可以将它们全部连接起来&&

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

要定义字段分隔符,如果您更喜欢 \xe2\x80\x93 或将其完全包含在代码中,则可以使用选项而不是参数-F,FS=,awkBEGIN{ }BEGIN{ FS="," }

\n