我有一个内容为
的文件E006:Jane:HR:9800:Asst
E005:Bob:HR:5600:Exe
E002:Barney:Purc:2300:PSE
E009:Miffy:Purc:3600:Mngr
E001:Franny:Accts:7670:Mngr
E003:Ostwald:Mrktg:4800:Trainee
E004:Pearl:Accts:1800:SSE
E009:Lala:Mrktg:6566:SE
E018:Popoye:Sales:6400:QAE
E007:Olan:Sales:5800:Asst
我想使用包含管道的命令获取列出所有员工代码在E001和E018之间的员工吗?
答案 0 :(得分:1)
您可以使用awk
来处理此类情况:
$ gawk 'BEGIN { FS=":" } /^E([0-9]+)/ { n=substr($1, 2)+0; if (n >= 6 && n <= 18) { print } }' < data.txt
E006:Jane:HR:9800:Asst
E009:Miffy:Purc:3600:Mngr
E009:Lala:Mrktg:6566:SE
E018:Popoye:Sales:6400:QAE
E007:Olan:Sales:5800:Asst
这是您想要的结果吗?此示例故意仅打印6到18之间的员工,以显示它过滤掉记录。您只能使用$1
或$2
中的print $1 " " $2
打印某些字段。
答案 1 :(得分:1)
使用sed:
sed -n -e '/^E001:/,/^E018:/p' data.txt
也就是说,打印那些以E001和E018开头的行之间的行。
如果你想让数字之间的员工在那些之间,那么一种方法就是使用像awk这样的东西进行内联比较(如hochl所建议的那样)。或者,您可以采用此方法前面加sort
(如果这些行尚未排序)。
sort data.txt | sed -n -e '/^E001:/,/^E018:/p'
答案 2 :(得分:0)
你可以尝试这样的事情:cut -b2- | awk '{ if ($1 < 18) print "E" $0 }'
答案 3 :(得分:0)
只需进行字符串比较:由于所有样本数据都匹配,我更改了插图的边界
awk -F: '"E004" <= $1 && $1 <= "E009" {print}'
输出
E006:Jane:HR:9800:Asst
E005:Bob:HR:5600:Exe
E009:Miffy:Purc:3600:Mngr
E004:Pearl:Accts:1800:SSE
E009:Lala:Mrktg:6566:SE
E007:Olan:Sales:5800:Asst
如果您不想在awk脚本中对它们进行硬编码,则可以将字符串作为变量传递
awk -F: -v start=E004 -v stop=E009 'start <= $1 && $1 <= stop {print}'