2016-11-11 30 views
0

我有以下几点:如何在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 

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

回答

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(真),当它换人,但我不认为有多大的优势,这样做。

请注意,我已将0添加到该字段以确保执行数字比较。原因如下:GNU awk manual

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

+0

谢谢:),我得到了一些奇怪的东西发生,如果我编辑的awk值,并使其80到90我什么都没有得到,我必须改变$$ ||。并返回它的工作,同样的事情,如果我想改变awk回到90到100 .. awk缓存什么吗? – Hopelessone

+0

我刚做了一个修改脚本的修改。 –

+0

谢谢你的答案是完美:) – Hopelessone

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

双逃脱美元符号。

相关问题