给定一个名为employee.txt
的文件,格式为(Firstname,Lastname,Salary),空格为字段分隔符:
Foo Bar $1,000
First Last $5,550
Abc Def $3,000
Stack Overflow $6000
Help Please $4700
我想要打印第三个字段大于$ 4,000的行。期望的输出:
First Last $5,550
Stack Overflow $6000
Help Please $4700
我不确定如何检查字段是否大于4000,例如,其中包含$
和,
。
我尝试使用sed
替换$
和,
空白然后重定向到awk
,但我希望输出包含$
和原来的,
一样。
这适用于awk
吗?
答案 0 :(得分:3)
$ awk '{v=$3; gsub(/[$,]/, "", v)} v+0>4000' employee.txt
First Last $5,550
Stack Overflow $6000
Help Please $4700
v=$3
将第三个字段另存为变量v
。
gsub(/[$,]/, "", v)
从v
,
v+0>4000
打印v
大于4000的行。
要打印值大于4000且小于5000的所有行:
$ awk '{v=$3; gsub(/[$,]/, "", v)} v+0>4000 && v+0<5000' employee.txt
Help Please $4700
答案 1 :(得分:1)
对于多样性,这里是一个仅使用bash
的解决方案(显着缓慢的大数据与awk
解决方案相比):
while IFS=' ' read -r first last cash; do
valid_cash=${cash//[$,]/}
(( valid_cash > 4000 )) && echo "$first $last $cash"
done < employee.txt
答案 2 :(得分:0)
awk 'gensub(/[$,]/,"","g",$NF) > 4000' input_file
(g)awk的默认操作是print