3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rubyで言語処理100本ノック 第2章: UNIXコマンドの基礎 (14 ~ 16)

Posted at

言語処理100本ノックの挑戦記録です。

今回は、テキストファイルから指定した範囲の行数を取得・分割する処理です。

14. 先頭からN行を出力

自然数Nをコマンドライン引数などの手段で受け取り,入力のうち先頭のN行だけを表示せよ.確認にはheadコマンドを用いよ.

Ruby
file_name = "hightemp.txt"
lines = File.readlines(file_name)

n = ARGV[0].to_i

puts lines.slice(0...n)
shell
head hightemp.txt

N = 10 の場合

結果
高知県	江川崎	41	2013-08-12
埼玉県	熊谷	40.9	2007-08-16
岐阜県	多治見	40.9	2007-08-16
山形県	山形	40.8	1933-07-25
山梨県	甲府	40.7	2013-08-10
和歌山県	かつらぎ	40.6	1994-08-08
静岡県	天竜	40.6	1994-08-04
山梨県	勝沼	40.5	2013-08-10
埼玉県	越谷	40.4	2007-08-16
群馬県	館林	40.3	2007-08-16

headコマンドは、-[数字]というオプションを指定することで任意の行数を指定できるそうな。

head -5 hightemp.txt

15. 末尾のN行を出力

自然数Nをコマンドライン引数などの手段で受け取り,入力のうち末尾のN行だけを表示せよ.確認にはtailコマンドを用いよ.

Ruby
file_name = "hightemp.txt"
lines = File.readlines(file_name)

n = [ARGV[0].to_i, lines.length].min
exit if n == 0

puts lines.slice(-n..-1)

tailコマンドも、-[数字] オプションで行数指定できるんですね。

shell
tail -5 hightemp.txt
結果
埼玉県  鳩山    39.9    1997-07-05
大阪府  豊中    39.9    1994-08-08
山梨県  大月    39.9    1990-07-19
山形県  鶴岡    39.9    1978-08-03
愛知県  名古屋  39.9    1942-08-02

16. ファイルをN分割する

自然数Nをコマンドライン引数などの手段で受け取り,入力のファイルを行単位でN分割せよ.同様の処理をsplitコマンドで実現せよ.

Ruby
file_name = "hightemp.txt"
lines = File.readlines(file_name)

n = ARGV[0].to_i

lines.each_slice(n).each_with_index do |line, i|
  File.open("split_hightemp_#{i}.txt", "w") { |file| file.puts line }
end

N = 5 の場合
-l オプションで行数を指定しました。

shell
split -l 5 hightemp.txt

本日はここまでー!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?