2011-11-02 69 views
1

我有一個文件,該文件內容過濾器使用shell腳本工具

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使用的命令,包括管之間是有可能得到一個文件?

回答

1

用sed:

sed -n -e '/^E001:/,/^E018:/p' data.txt 

也就是說,打印字面上那些與E001和E018開始線之間的線路。

如果你想獲得那些在數值之間的員工,一種方法是使用類似awk的內聯進行內聯比較(如hochl所示)。或者,您可以採用這種方法,前面有sort(如果行尚未排序)。

sort data.txt | sed -n -e '/^E001:/,/^E018:/p' 
+0

第二次使用它的排序命令。謝謝。 –

0

你可以嘗試這樣的事情:cut -b2- | awk '{ if ($1 < 18) print "E" $0 }'

+0

不工作! –

+0

您是否嘗試將文件傳輸到此腳本? ('cat file | ...') –

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

+0

無用的'cat'! http://partmaps.org/era/unix/award.html :-) –

+0

是的是的... :) - 修正。 – hochl

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