linux - 如何使用grep命令显示文件最后一个字段大于100k小于140k的条目

标签 linux bash

我需要使用 grep 命令从员工文件中选择条目。

员工列表文件将薪水作为文件中每一行的最后一个字段。

如何使用 grep 仅选择工资大于 100000 且小于 140000 的员工?

这是我目前所拥有的,但我无法弄清楚如何防止列表中的 100000 个结果出现在 grep 结果中。

grep "[1][0-3]....$" emp.lst

这是我从 grep 得到的结果...

$ grep "[1][0-3]....$" emp.lst
0110    :v.k. agrawal        :g.m.      :marketing      :12/31/40  :100000
0110    :v.k. agrawal        :g.m.      :marketing      :12/31/40  :130000
0110    :v.k. agrawal        :g.m.      :marketing      :12/31/40  :120000

这是 emp.lst 的整个文件的 cat...

2233    :a.k. shukla         :g.m.      :sales          :12/12/52  :6000
9876    :jai sharma          :director  :production     :03/12/50  :7000
5678    :sumit chakrobarty   :d.g.m     :marketing      :04/19/43  :6000
2365    :barun sengupta      :director  :personnel      :05/11/47  :7800
5423    :n.k. gupta:chairman :admin                     :08/30/56  :5400
1006    :chanchal sanghvi    :director  :sales          :09/03/38  :6700
6213    :karuna ganguly      :g.m.      :accounts       :06/05/62  :6300
1265    :s.n. dasgupta       :manager   :sales          :09/12/63  :5600
4290    :jayant Chodhury     :executive :production     :09/07/50  :6000
2476    :anil aggarwal       :manager   :sales          :05/01/59  :5000
6521    :lalit chowdury      :director  :marketing:     :09/26/45   :8200
3212    :shyam saksena       :d.g.m     :accounts       :12/12/55  :6000
3564    :sudhir Agarwal      :executive :personnel      :07/06/47  :8000
2345    :j.b. saxena         :g.m.      :marketing      :03/12/45  :140000
0110    :v.k. agrawal        :g.m.      :marketing      :12/31/40  :100000
0110    :v.k. agrawal        :g.m.      :marketing      :12/31/40  :150500
0110    :v.k. agrawal        :g.m.      :marketing      :12/31/40  :130000
0110    :v.k. agrawal        :g.m.      :marketing      :12/31/40  :120000
0110    :v.k. agrawal        :g.m.      :marketing      :12/31/40  :190000

最佳答案

虽然有人可能会尝试用正则表达式来捏造数字比较,但我建议不要这样做。 awk 之类的东西似乎更适合手头的任务。

awk '{if( gensub( /:/, "",1, $NF) > 100000 && gensub( /:/, "",1, $NF) < 140000){print}}' emp.lst
0110    :v.k. agrawal        :g.m.      :marketing      :12/31/40  :130000
0110    :v.k. agrawal        :g.m.      :marketing      :12/31/40  :120000

由于格式似乎是固定宽度的,所以我将 : 替换为空,以便在每行的最后一个字段上进行数字比较。

关于linux - 如何使用grep命令显示文件最后一个字段大于100k小于140k的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55978472/

相关文章:

windows - Windows 版 Git 更改提交消息?

linux - GNU 并行负载均衡

linux - 重定向输出附加(小数)点。为什么?

linux - 存在于 PKGBUILD for arch linux 的文件系统中(由文件系统拥有)

linux - inotify:事件报告的顺序是否与它们在文件系统中发生的顺序严格相同?

c - 尝试编译 spdif-loop 时出现 "undefined reference"错误消息

java - 从另一个 Java 应用程序停止/启动/重新启动 Java 应用程序

linux - 在 Linux 上部署 Qt 应用程序二进制文件,与 LSB 兼容

java - EC2实例上的原子时间和系统时间差

linux - 在 BASH 中取消定义变量