0

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

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

不过,我想支持这一点,所以如果我有 INPUT* 或 INPUT?或输入。(任何正则表达式)而不是上面的 INPUT,它应该可以工作。

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

我正在尝试使用 $INPUT 在 perl 脚本中执行以下操作

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

但我无法让它发挥任何想法?

4

2 回答 2

1

如果您想使用反引号,则转义所有美元符号(假设您有一些东西,例如 'INPUT' in $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;
于 2013-05-07T02:49:06.097 回答
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}}}' 
于 2013-05-07T02:25:38.453 回答