使用正则表达式在文件上运行awk

时间:2013-05-07 02:23:15

标签: linux perl unix awk

我想在文件中找到所有出现的INPUT,JUST INPUT。我有以下内容,但它通过INPUT *

找到了所有内容
awk '{for(i=1;i<=NF;i++){if($i~/^INPUT/){print $i}}}' 

我想支持这个,所以如果我有INPUT *或INPUT?或INPUT。 (任何正则表达式)而不是上面的INPUT,它应该适用于此。

任何人都知道如何解决上述问题吗?谢谢。

我正在尝试使用$ INPUT

在perl脚本中执行以下操作
`awk '{for(i=1;i<=NF;i++){if($i~/^$INPUT$/){print $i}}}' $file`

但是我无法让任何想法发挥作用?

2 个答案:

答案 0 :(得分:1)

如果你想使用反引号,那么逃避所有美元符号(假设你有某些东西,例如$INPUT中的'INPUT')::

`awk '{for(i=1;i<=NF;i++){if(\$i~/^$INPUT\$/){print \$i}}}' $file | wc -l`;

awk也可以计算你的匹配数量(这个数字每行计算一次):

`awk '/\y$INPUT\y/{s++} END{print s}' $file`;

并使用原生Perl,建议使用:

my $cnt;
open my $f, "<", "input" or die("$!");
while (<$f>) {
    $cnt++ while /\bINPUT\b/g;
}
close $f; 
print $cnt;

答案 1 :(得分:0)

您使用的正则表达式锚定在开头^但不是结束$。尝试:

 awk '{for(i=1;i<=NF;i++){if($i~/^INPUT$/){print $i}}}' 

如果您想在字段中的任何位置匹配INPUT,请尝试:

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