如何按字段搜索文件

时间:2013-12-31 09:10:42

标签: 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   

并且需要此输出:字段AB11以及2

中的3

我试过这个但是有些不对劲:

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

我的代码有什么问题吗?请告诉我,如果你有更好的鳕鱼给我看。

谢谢大家

3 个答案:

答案 0 :(得分:3)

您的代码中存在一些语法错误:

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

}中的结束if ($i ~/AB1/) }是一个错误,if需要一个命令,你需要一个结束}来匹配第一个{ },像这样:

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
1
2
3

答案 1 :(得分:0)

更正后的代码行 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 name

问题是括号你把它放在错误的地方

答案 2 :(得分:0)

如果你想要“字段中的字符串:n n n”:

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 ;
                   }
                }    '

这匹配字段中任何位置的字符串(例如:“... AB1 ...”匹配)

如果您更喜欢完全匹配:

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 ;
                   }
                }    '

那个完全匹配(即:“AB1”匹配“AB1”,但不是“...... AB1kkk”)