如果该字段前面有$符号,如何检查某个字段是否大于某个数字?

问题描述 投票:5回答:3

给定一个名为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有用吗?

bash awk
3个回答
3
投票
$ awk '{v=$3; gsub(/[$,]/, "", v)} v+0>4000' employee.txt 
First Last $5,550
Stack Overflow $6000
Help Please $4700

How it works

  1. v=$3 将第三个字段保存为变量v
  2. gsub(/[$,]/, "", v)v中删除有问题的字符,
  3. v+0>4000 打印v大于4000的行。

Printing a range of values

要打印值大于4000且小于5000的所有行:

$ awk '{v=$3; gsub(/[$,]/, "", v)} v+0>4000 && v+0<5000' employee.txt 
Help Please $4700

1
投票

对于多样性,这里是一个仅使用bash的解决方案(与awk解决方案相比,大数据明显缓慢):

while IFS=' ' read -r first last cash; do
    valid_cash=${cash//[$,]/}
    (( valid_cash > 4000 )) && echo "$first $last $cash"
done < employee.txt

0
投票
awk 'gensub(/[$,]/,"","g",$NF) > 4000' input_file

(g)awk的默认操作是print

© www.soinside.com 2019 - 2024. All rights reserved.