给定一个名为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
有用吗?
$ 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
对于多样性,这里是一个仅使用bash
的解决方案(与awk
解决方案相比,大数据明显缓慢):
while IFS=' ' read -r first last cash; do
valid_cash=${cash//[$,]/}
(( valid_cash > 4000 )) && echo "$first $last $cash"
done < employee.txt
awk 'gensub(/[$,]/,"","g",$NF) > 4000' input_file
(g)awk的默认操作是print