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