2015-06-04 33 views
0

我想將大文件的前10行打印到新文件中。有了這個oneliner我可以打印線顯示器:Perl oneliner:將第一行打印到文件中

> perl -ne "print if $. < 10" in.csv 

我嘗試這樣做:

> perl -ne "print if $. < 10" in.csv >out.txt 

但這只是沒了第一行寫進去創建文件out.txt。這段代碼有什麼問題?
感謝您的幫助


的Windows 7 /草莓的Perl


UPDATE1:
如果我用送監視器上的打印結果:

> perl -ne "print if $. <= 10" in.csv 

程序不會停止,也就是說,前十行輸出到顯示器上,但不會以:

> 

我必須使用Ctrl + c來停止程序。

使用像ikegami這樣簡單的csv-File(只是一些行),onliner的作品。我假設在csv文件中有一些東西。

更新2:
原onliner:

> perl -ne "print if $. <= 10" in.csv >out.txt 

作品。我必須等待幾秒鐘。 csv文件大小爲2 GB。在線人:

> perl -pe "exit if $. > 10" in.csv >out.txt 

立即給出結果。結論:第一個在線人穿過所有行,第二個出口在10行之後。

對不起,我打擾你這個問題。我吸取了教訓:使用合適的在線人員或等待幾秒鐘。

+3

這是一個MSWin cmd.exe問題,而不是Perl問題。 – choroba

+0

它適用於win2k8r2。輸出文件在初始創建後是否設置爲只讀? – stevieb

+0

@stevieb。不可以。可以寫。我嘗試了ikegami的例子,它的工作原理。顯然,它與原始的csv文件有關。 – giordano

回答

1

哼?這是正確的(除了< 10應該<= 10):當沒有更多的打印,而不是打印整個文件

>type in.csv 
a 
b 
c 
d 
e 
f 
g 
h 
i 
j 
k 
l 
m 
n 
... 
z 

>perl -ne "print if $. <= 10" in.csv >out.txt 

>type out.txt 
a 
b 
c 
d 
e 
f 
g 
h 
i 
j 

> 

更快的解決方案將退出。

​​
+1

可能沒有任何一點繼續閱讀並丟棄額外的行。如何:'perl -pe「退出如果$。> 10」'? –

+0

好的提示。就個人而言,我會用'last'。 – ikegami

+0

@格蘭特麥克萊恩謝謝!!這對我的csv文件起作用。也許你有一個想法,爲什麼這個oneliner的作品,另一個不使用原始文件?如果你把答案作爲答案**,我會給你一個觀點。 – giordano

相關問題