使用awk查找列值*

时间:2019-11-07 18:46:13

标签: regex linux awk

当前,我有一个包含多列的文件,在我的第4,5列上,空值显示为*

我尝试过


awk '{if ($4==/*) {print}}' filename
awk '{if ($4==\*) {print}}' filename
awk '{if ($4=='*') {print}}' filename
awk '{if ($4=='\*') {print}}' filename
awk '{if ($4=='/*/') {print}}' filename

对于

awk '{if ($4=='/*/') {print}}' filename
awk '{if ($4==/*/) {print}}' filename

它们可以运行,但不输出任何内容(但我知道文件中有*值)

休息,他们得到语法错误或正则表达式错误

我该怎么做才能解决这个问题?

3 个答案:

答案 0 :(得分:2)

awk字符串用双引号引起来。 awk脚本通常放在单引号中,如果在awk字符串周围也使用单引号,它们将终止shell字符串,而不是划定awk字符串(并且shell单引号不会提供任何转义机制)。

awk '$4 == "*"' filename

处理行的条件放在操作之前,如果没有操作块,则默认为打印该行。因此,以上等效于:

awk '{if ($4 == "*") print}' filename

答案 1 :(得分:1)

使用awk模式实施条件

awk '$4 == "*" || $5 == "*" { print }'

Or Even
awk '$4 == "*" || $5 == "*"'

答案 2 :(得分:0)

我会使用函数index()

awk 'index($4""$5, "*")' file

index(s, t)返回t或{{1}中子字符串s0中找不到的位置。

上面的程序使用t函数作为条件。如果该情况为真,s将打印当前行。 index()(未找到)在awk中为假色。上面程序的更明确的版本是:

awk