If statement 如何按字段搜索文件

If statement 如何按字段搜索文件,if-statement,for-loop,awk,If Statement,For Loop,Awk,我有以下意见: AB1 oo1 FE11 aq cd7 pp9 xw11 as md1 Al1 as101 sd ak5 AB1 aw1 sd ci6 QB7 cr12 sw do0 RB1 AB1 sq 并且需要此输出:AB1字段中的1和2

我有以下意见:

AB1       oo1       FE11         aq 
cd7       pp9       xw11         as
md1       Al1       as101        sd   
ak5       AB1       aw1          sd
ci6       QB7       cr12         sw
do0       RB1       AB1          sq   
并且需要此输出:
AB1
字段中的
1
2
3

我试过了,但有点不对劲:

awk '{ for (i=1;i<NF;i++) { if ($i ~/AB1/) } print $i }' file name  

awk'{for(i=1;i您的代码中有一些语法错误:

awk '{ for (i=1;i<NF;i++) { if ($i ~/AB1/) } print $i }' file name 
更正此语法错误后,输出为:

AB1
AB1
AB1
要使用值
AB1
打印字段的编号,我将这样写:

awk '{ for (i=1;i<NF;i++) { if ($i ~/AB1/) print $i }}' file name 
$ awk '{ for (i=1; i<NF; ++i) if ($i == "AB1") print i }' file
1
2
3
$awk'{for(i=1;i已更正的代码行
awk'{for(i=1;i如果需要“字段中的字符串:n”:

awk-v string=“AB1”
{if(maxNF对于(i=1;i您想在这里实现什么?您只想检查一行是否包含
AB1
?我想每个字段的编号都包含(“AB”)因此,在这个例子中,AB在字段1,2,3中,而不是在第4个字段中,因此我需要cod来告诉我哪个字段包含AB1。希望清除。您希望命令的输出是一行数字,如
“1 2 3”
?非常感谢janos,但我想知道包含AB1@mahmoud不客气,我根据你的评论更新了我的答案。我知道答案很长,有点难看,但我希望它可读/可以理解^^
awk '{ for (i=1;i<NF;i++) { if ($i ~/AB1/) } print $i }' file name
awk -v string="AB1" '

              {   if ( maxNF < NF ) {   maxNF = NF ; } }

    $0~string {   we_found_it=1 ;
                  for (i=1; i<=NF; i++)
                  {  if ( $i ~ string ) {  found_in[i]++ ; }
                  }
               }

     END       {  if ( we_found_it == 1 )
                  {   printf "%s in the fields: ", string ;
                      for (i=1; i<=maxNF ; i++)
                      {   if (found_in[i]>0)
                          {  printf "%s ", i ;
                          }
                      }
                   }
                   else
                   {   printf "%s was NOT found in any fields.", string ;
                   }
                }    '
awk -v string="AB1" '

              {   if ( maxNF < NF ) {   maxNF = NF ; } }

    $0~string {   for (i=1; i<=NF; i++)
                  {  if ( $i == string ) 
                     {   we_found_it=1 ;
                         found_in[i]++ ;
                     }
                  }
               }

     END       {  if ( we_found_it == 1 )
                  {   printf "%s in the fields: ", string ;
                      for (i=1; i<=maxNF ; i++)
                      {   if (found_in[i]>0)
                          {  printf "%s ", i ;
                          }
                      }
                   }
                   else
                   {   printf "%s was NOT found in any fields.", string ;
                   }
                }    '