2015-12-15 58 views
1

我有一個平面文件,其中包含系統中現有的軟件包列表。我想看看包裝是如何基於正則表達式將文件內容分爲不同的組?

  1. 一批組件(通常,名稱以batch
  2. 服務(名稱以serv結束)
  3. 一個消息守護進程(名稱以d結束)
  4. Web組件(名稱以web結尾)
  5. 和那些不屬於任何類別的(意思是沒有按照慣例命名)

我寫了這個bash腳本爲同:

grep serv$ pack_list.txt > serv_list.txt 
grep d$ pack_list.txt > daemon_list.txt 
grep ^batch pack_list.txt > batch_list.txt 
grep web$ pack_list.txt > web_list.txt 
grep -v serv$ pack_list.txt | grep -v d$ | grep -v ^batch | grep -v web$ > uncat_list.txt 

雖然滿足我現在的要求,並不需要太多的時間,我不禁在想一些其他的語言將是這幾樣更好的選擇的操作。

--- EDIT--

例輸入將是:

fileserv 
batch_file_processor 
userweb 
processord 

每個將進入一個不同的文件。

爲了澄清什麼,我在尋找:我正在尋找一些語言,其中該處理將有優於語法支持:

  1. 如下命令grep每個正則表達式。
  2. 像Python或Perl這樣的一系列if條件可以。

    switch line.match($1): 
        case (pattern1): 
          ... 
        case (pattern2): 
          ... 
    

    任何建議:

的線沿線的東西嗎?

+0

會在哪裏'batch_test.serv'去?第一組還是第二組?或兩者? – anishsane

+0

請提供實際數據和預期產出。 –

回答

2

單awk中的過程可以這樣做要好得多,針對你的模式每一行匹配和重定向輸出正確:

awk '{ 
    if ($0 ~ /serv$/) { print > "serv_list.txt" } 
    else if ($0 ~ /d$) { print > "daemon_list.txt" } 
    // ... and so on 
    else { print > "uncat_list.txt" } 
}' pack_list.txt