Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用shell脚本工具筛选文件_Bash_Unix - Fatal编程技术网

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}'