言語処理100本ノック 2015の挑戦記録です。環境はUbuntu 16.04 LTS + Python 3.5.2 :: Anaconda 4.1.1 (64-bit)です。過去のノックの一覧はこちらからどうぞ。
第2章: UNIXコマンドの基礎
hightemp.txtは,日本の最高気温の記録を「都道府県」「地点」「℃」「日」のタブ区切り形式で格納したファイルである.以下の処理を行うプログラムを作成し,hightemp.txtを入力ファイルとして実行せよ.さらに,同様の処理をUNIXコマンドでも実行し,プログラムの実行結果を確認せよ.
###12.1列目をcol1.txtに,2列目をcol2.txtに保存
各行の1列目だけを抜き出したものをcol1.txtに,2列目だけを抜き出したものをcol2.txtとしてファイルに保存せよ.確認にはcutコマンドを用いよ.
出来上がったコード:
# coding: utf-8
fname = 'hightemp.txt'
with open(fname) as data_file, \
open('col1.txt', mode='w') as col1_file, \
open('col2.txt', mode='w') as col2_file:
for line in data_file:
cols = line.split('\t')
col1_file.write(cols[0] + '\n')
col2_file.write(cols[1] + '\n')
実行結果:
高知県
埼玉県
岐阜県
山形県
山梨県
和歌山県
静岡県
山梨県
埼玉県
群馬県
群馬県
愛知県
千葉県
静岡県
愛媛県
山形県
岐阜県
群馬県
千葉県
埼玉県
大阪府
山梨県
山形県
愛知県
江川崎
熊谷
多治見
山形
甲府
かつらぎ
天竜
勝沼
越谷
館林
上里見
愛西
牛久
佐久間
宇和島
酒田
美濃
前橋
茂原
鳩山
豊中
大月
鶴岡
名古屋
UNIXコマンドの確認は、シェルスクリプトで行いました。
#!/bin/sh
# col1の抽出と比較
cut --fields=1 hightemp.txt > col1_test.txt
diff --report-identical-files col1.txt col1_test.txt
# col2の抽出と比較
cut --fields=2 hightemp.txt > col2_test.txt
diff --report-identical-files col2.txt col2_test.txt
実行結果:
ファイル col1.txt と col1_test.txt は同一です
ファイル col2.txt と col2_test.txt は同一です
無事、同じ結果になりました。
UNIXコマンドの短いオプションと長いオプション
UNIXコマンドのオプションは、短いものと長いものがペアになっていることが多いです。長い方が意味が分かりやすいので、このノックでは長い方を使っています。ただ、よく使うものは短いものを覚えた方が入力が楽ですね。
今回使ったコマンドの短いオプションは次の通りです。詳細はman
でご確認ください。
コマンド | 今回使ったオプション | 短いオプション | 意味 |
---|---|---|---|
cut | --fields | -f | 切り出すフィールドの番号 |
diff | --report-identical-files | -s | 比較結果が同じ場合も報告 |
13本目のノックは以上です。誤りなどありましたら、ご指摘いただけますと幸いです。