2013-07-09 73 views
0

這可能是一個非常簡單的問題,但我不明白到底發生了什麼,儘管我單獨瞭解命令yes,nlhead瞭解linux中的管道

yes | nl | head -1000 > data1.txt  

我不明白是怎麼管是通過所有這些互動,以與數字1-1000數據文件在不同線路上用y旁邊的每個:

1 y 
2 y 
3 y 
4 y 
5 y 
6 y 
7 y 
8 y 
9 y 
10 y 
11 y 
12 y 
13 y 
14 y 
15 y 
16 y 
17 y 
18 y 
19 y 
20 y 
21 y 
22 y 
23 y 
24 y 

等。最多1000

任何解釋表示讚賞。

回答

2

左側命令的輸出將作爲|右側命令的輸入進行傳遞。

對於你的例子,是的輸出無限數y,nl增加了rownumber到那些y。然後頭部命令返回它們的前1000行。

>不是管道的一部分。它用於將您的輸出從STDOUT重定向到一個文件。

+0

感謝幫助,這部分使它點擊「是輸出無限數量的'y',並且nl給'y'添加了rownumber」 –

+0

你應該說一些關於執行是否有點權利的問題,否則第一部分(是)會給你一個無限循環。 – mnagel

2

|用於管道系統,即用於多個進程之間的通信,簡單地說,您可以將一個進程的輸出傳遞給另一個進程的輸入。

現在「是」男人網頁顯示:

"Repeatedly output a line with all specified STRING(s), or `y'." 

既然你沒有通過任何STRING(S)則輸出「Y」,並將其傳遞到「NL」這給了一些每行。 「NL」手冊頁說:

"Write each FILE to standard output, with line numbers added. With no FILE, 
or when FILE is -, read standard input." 

後來head -1000輸出限制爲1000線和>輸出寫入到data.txt中。希望這將澄清。

+0

感謝幫助 –