[Linux] 流 ( Stream )、管道 ( Pipeline ) 、Filter - 筆記


流 ( Stream )

1. 流,是指可使用的數據元素一個序列。

2. 流,可以想象為是傳送帶上等待加工處理的物品,也可以想象為工廠流水線上的物品。

3. 流,可以是無限的數據。

4. 有一種功能,處理這一個流同時產生着另一個流。這種功能被成為 過濾 ( Filter )。使用管道 ( pipelie ) 將這些功能進行連接。

 

Unix 管道 ( Pipeline )

1. 管道連接着處理元素,一個處理元素的輸出是下一個處理處理元素的輸入。

2. 管道能加快數據處理速度。

2. Unix 下的管道圖示如下。

舉個例子,列出當前目錄下的所有文件( ls -l ),只保留帶有字符串 key 的文件名( grep key ),並且在滾屏中查看( less )

 ls -l | grep key | less

 

Filter

1. 是指用於處理流的程序。盡管 filter 可以單獨使用,但是他們常常通過管道,組合起來使用。

2. 默認從標准輸入( standard input )獲取數據,寫到標准輸出( standard output )。可以通過輸入操作符 < 改變數據源,通過輸出操作符 > 改變寫入目標,通過追加操作符 >> 追加數據。

3. 通過管道符 | ,鏈接多個 Filter。

4. 例子。從 /etc/passwd 獲取數據,將得到的每一行根據 ":" 進行分割並獲取第一字字段( cut -d : -f 1 /etc/passwd ),提起包含 foo 字符串的行輸出( grep foo )

cut -d : -f 1 /etc/passwd | grep foo

5. 常見的 Filter 程序有:

  grep :  從文本數據集中,搜索匹配到的正則表達式的行,一行為單位。

$ cat fruitlist.txt
apple
apples
pineapple
apple-
apple-fruit
fruit-apple
banana
pear
peach
orange

$ grep apple fruitlist.txt 
apple
apples
pineapple
apple-
apple-fruit
fruit-apple

  cat : 讀取多個文件,並依次寫入標准輸出。

cat [options] [file_names] > newfile.txt

  cut : 提取每一個行的一部分內容作為輸出。較少用,例子略

  head : 顯示文本文件內容,或者管道數據中的開頭部分。

head -n 20 filename

  tail : 顯示文本文件內容,或者管道數據中的結尾部分。

tail -n 20 filename

  sort : 對文本文件內容,或者管道數據進行排序,並輸出。可指定排序列

$ cat zipcode
Adam  12345
Bob   34567
Joe   56789
Sam   45678
Wendy 23456
   
$ sort -k 2n zipcode
Adam  12345
Wendy 23456
Bob   34567
Sam   45678
Joe   56789

 

 

參考資料

Stream (computing), wikipedia

Pipeline (Unix), wikipedia

Bubble (computing), wikipedia

Filter, wikipedia 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM