素人の言語処理100本ノック:12

  • 1
    いいね
  • 0
    コメント

言語処理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コマンドを用いよ.

出来上がったコード:

main.py
# 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')

実行結果:

col1.txt
高知県
埼玉県
岐阜県
山形県
山梨県
和歌山県
静岡県
山梨県
埼玉県
群馬県
群馬県
愛知県
千葉県
静岡県
愛媛県
山形県
岐阜県
群馬県
千葉県
埼玉県
大阪府
山梨県
山形県
愛知県
col2.txt
江川崎
熊谷
多治見
山形
甲府
かつらぎ
天竜
勝沼
越谷
館林
上里見
愛西
牛久
佐久間
宇和島
酒田
美濃
前橋
茂原
鳩山
豊中
大月
鶴岡
名古屋

UNIXコマンドの確認は、シェルスクリプトで行いました。

test.sh
#!/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本目のノックは以上です。誤りなどありましたら、ご指摘いただけますと幸いです。