Bash 使用shell脚本工具筛选文件
我有一个文件,其中的内容是Bash 使用shell脚本工具筛选文件,bash,unix,Bash,Unix,我有一个文件,其中的内容是 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 E00
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
我想使用命令获取emp代码在E001和E018之间的所有员工的列表,包括管道。可以获取吗?您可以尝试这样的方法:
cut-b2-|awk'{如果($1<18)打印“E”$0}
您可以使用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
$gawk'BEGIN{FS=“:”}/^E([0-9]+)/{n=substr($1,2)+0;如果(n>=6&&n使用sed:
sed -n -e '/^E001:/,/^E018:/p' data.txt
也就是说,打印以E001和E018开头的行之间的行
如果你想得到在数字上介于两者之间的员工,一种方法是使用类似awk的东西进行内联比较(正如hochl所建议的)。或者,你可以采用这种方法,在排序之前加上排序(如果行尚未排序)
只需进行字符串比较:由于所有示例数据都匹配,因此我更改了用于说明的边界
awk -F: '"E004" <= $1 && $1 <= "E009" {print}'
如果不想在awk脚本中硬编码字符串,可以将其作为变量传递
awk -F: -v start=E004 -v stop=E009 'start <= $1 && $1 <= stop {print}'
awk-F:-v start=E004-v stop=E009'start是否尝试将文件通过管道传输到此脚本?(cat file |…
)
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 -F: -v start=E004 -v stop=E009 'start <= $1 && $1 <= stop {print}'