0

我有一个将文本发送到标准输出的程序。但我只想保留第五列不是“*”的那些行。那是星号字符,而不是捕获所有内容的正则表达式。我似乎无法为此使用转义,我已经尝试过

./a.out |awk '$5!=* {print}'
awk: $5!=* {print}
awk:     ^ syntax error
./a.out |awk '$5!=\* {print}'
awk: $5!=\* {print}
awk:     ^ backslash not last character on line

awk 当然不是必需的,但我认为这将是最简单的。

谢谢

4

4 回答 4

4

awk类似于大多数 Algol/C 系列语言;文字字符串需要字符串引号。

awk '$5 != "*" {print}'
于 2012-04-11T01:34:58.240 回答
2

试试这个:

awk '$5!="*"{print}'
于 2012-04-11T01:39:38.813 回答
1

在 Perl 中:

perl -ane 'print unless $F[4] eq q(*)' file

-n开关将此循环包装在您的脚本周围,以读取命令行上的文件名参数:

LINE:
while (<>) {
    ... # your script here
}

-a行(在空格上)自动拆分为一个名为@F. Unlikeawk 的预先声明的数组,$F[0] 只是第一个字段。

-e参数只是你的脚本。

于 2012-04-11T01:41:02.657 回答
-1

这可能对您有用:

awk '$5 !~ /^[*]$/' file
于 2012-04-11T04:55:46.920 回答