-1

このように Ruby を実行したい

cat *.txt |my_print_last_line.rb

そして、各ファイルの最後の行を印刷します(最初に印刷できれば、何か面白いことができるかもしれません)

クラスはそれARGFを解決することを約束しているようです。これを試しました:

ARGF.each do |line|
  last_line_of_file = line[last] 
  puts last_line_of_file
end

ただしARGF.each、個々のファイルではなく、連結されたすべてのファイルの 1 つの長い文字列のようです。

4

1 に答える 1

1

これは、cat複数のファイルを処理する方法に関係しています。それらを連結するだけです:

$ echo 'foo' > foo
$ echo 'bar' > bar
$ cat *
foo
bar

これは、catコマンドを発行した後、個々のファイルの開始場所と終了場所を知る方法がないことを意味します。使用するとすべてのファイルが単純に連結されるため、スクリプトを呼び出すだけruby my_print_last_line.rb *.txtでも同じ問題が発生します。ARGF

別の方法として、ファイル名をパラメータとして ruby​​ スクリプトに渡して、ファイルを直接 ruby​​ で開いて読み取ることができます。

ARGV.each do |file|
  puts IO.readlines(file).last
end

次に、次のようにスクリプトを呼び出します。

$ ruby my_print_last_line.rb *.txt

非常に大きなファイルを読み取っている場合は、同様の質問に対するこの回答seekで @DonaldScottWilde が説明しているように、ベースのアプローチを使用することでパフォーマンスが大幅に向上する可能性があります。

于 2013-07-28T00:07:41.663 に答える