我有下面的命令,但它不输出任何内容。如果我保留print $0
或任何列(例如print $2
,print $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
。