我有以下内容:
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
我试图删除$符号使其更像一个整数,如何解决这个问题?
答案 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:
字符串常量或字符串操作的结果具有字符串属性。