如何使货币领域大于&低于AWK的价值?

时间:2016-11-11 11:31:47

标签: awk

我有以下内容:

field:field:field:$90.00:field
field:field:field:$85.00:field

我正在尝试使字段$ 4大于或者= 90,而不是100,但是,我的awk语句在某处错了,我无法弄清楚错误的位置和原因。

awk -F: '{gsub("\$","",$4); if ($4 >= 90 && $4 < 100) print $1 ":" $2 " " $4 }' file.txt > output.txt

我试图删除$符号使其更像一个整数,如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

echo "$x" | awk -F: '{gsub("\\$","",$4); if ($4 >= 90 && $4 < 100) print $1 ":" $2 " " $4 }'
field:field 90.00

双逃生美元符号。

答案 1 :(得分:1)

使用sub,因为您只想执行单个替换,而不是全局替换。另外,使用正则表达式文字,而不是字符串,首先由awk解析,因此需要双重转义:

sub(/\$/, "", $4)

您可以选择将锚点添加到字段/^\$/的开头。

就个人而言,我认为在print命令中使用逗号插入输出字段分隔符(默认为空格)会更好。

此外,请记住,awk程序的结构为condition { action },因此您不需要编写if

结合所有这些:

awk -F: '{ sub(/\$/, "", $4) } ($4+0) >= 90 && ($4+0) < 100 { print $1":"$2, $4 }' file.txt > output.txt

可以说,你可以制作条件的sub部分,因为当它进行替换时它会返回1(true),但我不认为它有很多这样做的好处。

请注意,我已在字段中添加0以确保执行数字比较。原因在GNU awk manual

中给出
  

字符串常量或字符串操作的结果具有字符串属性。

相关问题