2011-10-26 58 views
2

我需要幫助我的Perl代碼。我需要能夠在每行上至少有50行的文件中讀入一個字。我有一個代碼來打印文件中的每一行,但是如何將這些項目排序然後輸出到一個新文件中。Perl:文件進入排序文件出

while(<>){ 
chomp; 
print "$_ :is in the file"; 
} 

我竭力弄清楚如何採取一個文件,(我認爲<>解析按行文件行)出來把它放到其他文件。

+0

'@array = <>'以獲得所有線路。 [排序](http://perldoc.perl.org/functions/sort.html)他們,[打開](http://perldoc.perl.org/functions/open.html)輸出文件和[打印](http ://perldoc.perl.org/functions/print.html)。 – TLP

+0

所以我們在說話:open(new_file); foreach $ line(@array){print「$ line」; } close(new_file)不確定打開是否正確 – jenglee

+0

這些是指向文檔的鏈接,如果您想閱讀。打印數組時不需要循環 - print使用一個列表作爲參數:'print @ array'。 – TLP

回答

7

對於多個功能的方法的輸出,作爲一襯墊:

perl -e '$, = "\n"; print sort map { chomp; $_ } <>' input.txt > output.txt 

prints a sorted版本的mapping每行通過chomp,用換行符分隔($,)。

作爲一個獨立的腳本,其寫入到預定的文件:

#/usr/bin/env perl -w 

$, = "\n"; 

open(my $output, ">", "output.txt") 
    or die "Cannot open output.txt: $!\n"; 

print $output sort map { chomp; $_ } <>; 

close $output; 
+0

爲什麼先chomp然後添加換行符? – TLP

+1

@TLP:文件中的最後一行可能沒有換行符,在這種情況下,如果我們不刪除並重新添加換行符,它將在同一行打印出下一個更高的值。 –

+0

這真的讓我很難過,你偷了我的答案,並讓它看起來像你自己寫的,當你所做的只是調整它。如果你打算複製一個答案,至少應該給予原作者好評,所以它看起來不像*我*複製*你*。 – TLP

5
perl -we 'print sort <>' input.txt > output.txt 

擊穿:

  • 文件input.txt被打開閱讀時,我們使用鑽石操作 <>
  • <>在列表環境的文件中的所有行返回到sort
  • sort按字母順序排列行並將列表返回到print
  • print打印排序列表
  • 殼重定向從perl命令將文件 output.txt
+0

所以如果我從命令行傳入文件,我該怎麼做input.txt> output.txt(<>> output.txt) – jenglee

+0

完全像我的答案。當然,只有你必須輸入自己的文件名。 – TLP

+0

如果文件不以換行符結尾,這將產生不正確的輸出。 –