LoginSignup
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-06-11

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

今回から、第2章: UNIXコマンドの基礎です!

hightemp.txtは,日本の最高気温の記録を「都道府県」「地点」「℃」「日」のタブ区切り形式で格納したファイルである.
以下の処理を行うプログラムを作成し,hightemp.txtを入力ファイルとして実行せよ.
さらに,同様の処理をUNIXコマンドでも実行し,プログラムの実行結果を確認せよ.

10. 行数のカウント

行数をカウントせよ.確認にはwcコマンドを用いよ.

Ruby
file_path = "hightemp.txt"

puts File.read(file_path).count("\n")
shell
cat hightemp.txt | wc -l
結果
24

11. タブをスペースに置換

タブ1文字につきスペース1文字に置換せよ.
確認にはsedコマンド,trコマンド,もしくはexpandコマンドを用いよ.

Ruby
file_path = "hightemp.txt"

File.open(file_path) do |file|
  file.each_line do |line|
    puts line.gsub("\t", " ")
  end
end

今回はtrコマンドでやってみました。

shell
cat hightemp.txt | tr '\t' ' '

12. 1列目をcol1.txtに,2列目をcol2.txtに保存

各行の1列目だけを抜き出したものをcol1.txtに,
2列目だけを抜き出したものをcol2.txtとしてファイルに保存せよ.
確認にはcutコマンドを用いよ.

Ruby
file_path = "hightemp.txt"
prefectures = []
cities = []

File.open(file_path) do |file|
  file.each_line do |line|
    prefectures << line.split("\t")[0]
    cities << line.split("\t")[1]
  end
end

File.open("col1.txt", "w") do |file|
  file.puts prefectures
end

File.open("col2.txt", "w") do |file|
  file.puts cities
end
shell
cut -f 1 hightemp.txt
cut -f 2 hightemp.txt
結果
# col1.txt

高知県
埼玉県
岐阜県
山形県
山梨県
和歌山県
静岡県
山梨県
埼玉県
群馬県
群馬県
愛知県
千葉県
静岡県
愛媛県
山形県
岐阜県
群馬県
千葉県
埼玉県
大阪府
山梨県

# col2.txt

江川崎
熊谷
多治見
山形
甲府
かつらぎ
天竜
勝沼
越谷
館林
上里見
愛西
牛久
佐久間
宇和島
酒田
美濃
前橋
茂原
鳩山
豊中
大月
鶴岡
名古屋

13. col1.txtとcol2.txtをマージ

12で作ったcol1.txtとcol2.txtを結合し,元のファイルの1列目と2列目をタブ区切りで並べたテキストファイルを作成せよ.確認にはpasteコマンドを用いよ.

Ruby
prefectures = File.readlines("col1.txt").map(&:chomp)
cities = File.readlines("col2.txt").map(&:chomp)

pref_cities = [prefectures, cities].transpose.map{ |row| row.join("\t") }

File.open("pref_cities.txt", "w") do |file|
  file.puts pref_cities
end
shell
paste -d "\t"  col1.txt col2.txt
結果
高知県   江川崎
埼玉県   熊谷
岐阜県   多治見
山形県   山形
山梨県   甲府
和歌山県    かつらぎ
静岡県   天竜
山梨県   勝沼
埼玉県   越谷
群馬県   館林
群馬県   上里見
愛知県   愛西
千葉県   牛久
静岡県   佐久間
愛媛県   宇和島
山形県   酒田
岐阜県   美濃
群馬県   前橋
千葉県   茂原
埼玉県   鳩山
大阪府   豊中
山梨県   大月
山形県   鶴岡
愛知県   名古屋

UNIXコマンドも勉強しなければ...!

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
2