只打印具有特定列的行*

时间:2012-04-11 01:33:06

标签: regex perl bash awk

我有一个程序将文本发送到stdout。但我只想保留那些第五列不是'*'的行。这是星号char,而不是捕获所有内容的正则表达式。我似乎无法使用逃生,我已经尝试了

./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 个答案:

答案 0 :(得分:4)

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

awk '$5 != "*" {print}'

答案 1 :(得分:2)

试试这个:

awk '$5!="*"{print}'

答案 2 :(得分:1)

Perl:

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

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

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

-a自动将线(在空白处)自动分成一个名为@F. Unlike awk` $ F [0]的预先声明的数组,仅为第一个字段。

-e参数只是你的脚本。

答案 3 :(得分:-1)

这可能对您有用:

awk '$5 !~ /^[*]$/' file