我需要使用 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/