2011-10-26 20 views
2

私のperlコードのヘルプが必要です。私は、各行に最低50行で1単語のファイルを読み込むことができる必要があります。私はファイルから各行を出力するコードを持っていますが、これらの項目をどのように並べ替えてから新しいファイルに書き出すのですか?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)openが正しいことを確認していません – jenglee

+0

これは、読みたい場合は、ドキュメントへのリンクです。配列を出力するときにループする必要はありません。printは 'print @ array'という引数を引数として取ります。 – TLP

答えて

7

からperlコマンドの出力をリダイレクトソートされたリスト:

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

このprintssortedバージョン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

それはあなたが私の答えを盗んだことを本当に悩まして、それを自分で書いたように見せました。答えをコピーする場合は、元の著者にクレジットを与えることが礼儀正しいので、* I * copied * you *のようには見えません。 – TLP

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

内訳:我々はリストコンテキストでダイヤモンド演算子 <>

  • <>を使用する場合、ファイルinput.txtが読み込みのために開かれた

    • sort
    • sortにファイル内のすべての行を返します。行をアルファベット順にソートし、リストをprint
    • に返します。枚の
    • printプリントワンライナーとして
    • シェルはファイルより機能的アプローチを output.txt
  • +0

    コマンドラインからファイルを渡すと、input.txt> output.txt(<>> output.txt)をどうすればよいでしょうか。 – jenglee

    +0

    私の答えはまったく同じです。もちろん、自分のファイル名を入れなければなりません。 – TLP

    +0

    ファイルが改行で終わらないと、これにより出力が不正になります。 –

    関連する問題