awk 条件不工作

awk 条件不工作

我有下面的命令,但它不输出任何内容。如果我保留print $0或任何列(例如print $2print $3),它将按预期打印。看起来它没有读“if 语句”。

awk -F"," '{if ($2 >= 09170000000 && $2 <= 09179999999) print $0 }' filename

样本文件:

"dummy","09171234567","","dummy","dummy","dummy","dummy"

答案1

由于您告诉awk以逗号分隔的方式读取数据,因此引号将成为数据的一部分,并且整数比较将失败:

$ awk -F',' '{ print $2 }' file.txt
"09171234567"

相反,允许逗号用引号引起来:

$ awk -F'"?,"?' '{ print $2 }' file.txt
09171234567

该表达式的"?,"?意思是“逗号,前面和/或后面带有可选的双引号”。

最终awk代码:

$ awk -F'"?,"?' '$2 >= 09170000000 && $2 <= 09179999999' file.txt
"dummy","09171234567","","dummy","dummy","dummy","dummy"

如果没有块的条件{...}评估为 true,则将输出当前输入行。

答案2

因为您的 column#2 在 quote 中是文本"...",并且您正在进行整数比较。按如下方式定义"为分隔符之一,然后比较基于两者的第 5 列,"现在它是第 5 列:

awk -F'[",]' '{if ($5>= 09170000000 && $5 <= 09179999999) print $0 }' infile

或者简而言之:

awk -F'[",]' '$5>= 09170000000 && $5 <= 09179999999' infile

当我们使用两个,and"分隔符时,您的列号(col#*3)-1现在将就位,这意味着如果它$30之前在column中,那么现在它在column中$89

相关内容