言語処理100本ノック(第2章前半)



スポンサードリンク

第1章の続きです。

第2章UNIXコマンドの基礎

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

hightemp.txt の中身は以下です。

10. 行数のカウント

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

プログラムを実行するときに引数を渡すことができます。これをコマンドライン引数と言います。

sys.argv[]でコマンドライン引数を取得できます。ついでに引数が0は実行ファイル名が入ることに注意。

実行結果:

UNIXコマンドでの確認:

単純に行数を数えるだけならば、「wc -l ファイル名」 の方が早いらしい。

 

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

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

replaceというコマンドを用いるだけ。便利ですね!

実行結果:

UNIXコマンドでの確認:

 

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

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

特に難しいことはしてないです。ファイルをopenし1行ずつ読み込み、0番目(左から1列目)の要素と1番目(左から2列目)の要素だけファイルに書き込むように書いています。zip関数とか使ったらもう少し簡潔にかけそうです。

実行結果:

col1.txt

col2.txt

 いくつかおかしな箇所がありますが、おそらくhightemp.txtの形式に問題があり、プログラムの問題ではないでしょう。

UNIXコマンドでの確認:

 



スポンサードリンク

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

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

これはだいぶ手こずりました笑。まずopenにこんな使い方があるのを知らなかったのと、readline()もこんな風に使えるなんて知りませんでした。

あとはちょくちょく出てくるzip関数ですね笑とりあえず、二つ配列やらリスト型のデータがあって、二つに同様のfor文処理をさせる時は『zip』って覚えますかね。

実行結果:

UNIXコマンドでの確認:

 

14. 先頭からN行を出力

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

コマンドライン引数と言っているので、sys.argv[]を使います。

問題はコマンドライン引数で取得した数値(文字列)をどうやって数値(数字)として読み込むかですね。8行目のようなint(”数値”)でいけます。

実行結果:第二引数にN = 5を入力した場合

UNIXコマンドでの確認:

以上で2章の前半は終了です。続きはこちら→2章後半!



スポンサードリンク

記事が役に立ったらシェア!

投稿者:

中村 俊

中村 俊

1993/09/04生まれ。機械系大学院を休学し、ベンチャーでインターンしている最中。直近では、デカルトの「方法序説」に感銘を受けた。 趣味:読書、web開発の勉強、異分野の論文読んだり、記事書いたり。 最終的には経営者か研究者になりたい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA