当前,我有一个包含多列的文件,在我的第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
它们可以运行,但不输出任何内容(但我知道文件中有*值)
休息,他们得到语法错误或正则表达式错误
我该怎么做才能解决这个问题?
答案 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}中子字符串s
在0
中找不到的位置。>
上面的程序使用t
函数作为条件。如果该情况为真,s
将打印当前行。 index()
(未找到)在awk中为假色。上面程序的更明确的版本是:
awk