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

时间:2017-12-28 00:36:06

标签: bash awk

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

3 个答案:

答案 0 :(得分:3)

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

如何运作

  1. v=$3

    将第三个字段另存为变量v

  2. gsub(/[$,]/, "", v)

    v

  3. 中删除有问题的字符
  4. v+0>4000

    打印v大于4000的行。

  5. 打印一系列值

    要打印值大于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