名前 毛利安裕美
担当情報実験機 joho16
quiz1.sh.txt
テキストファイル内の単語について、一文字ずつアルファベットをずらし、元の単語を調べるスクリプトです。
スクリプトをホームディレクトリにコピーし、ファイル名をquiz1.shに変更してください。そして、chmod 744 quiz1.sh で実行権限を与えます。
次に3つのテキストファイルkadai1-1_data.txt, kadai1-2_data.txt, kadai1-3_data.txt をITPASSサーバー上から、ホームディレクトリにコピーしてください。 ./quiz1.sh [テキストファイル名] と入力し、Enter キーで実行してください。
問1の実行結果
1.yahoo知恵袋
URL http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1351454743
大文字、小文字それぞれを大きさを変えずに変換する際のヒントになりました。
2.Bashでアルファベット順にn文字ずらした文字列を得るURL http://memo-off.blogspot.jp/2012/11/bashn.html
3.シーザー暗号➖通信用語の基礎知識URL http://www.wdic.org/w/WDIC/%E3%82%B7%E3%83%BC%E3%82%B6%E3%83%BC%E6%9A%97%E5%8F%B7
2.3.ではテキストをn文字ずらす方法を調べました。
4.池田くんのレポートURL http://itpass.scitec.kobe-u.ac.jp/~ikedaryo/report01/index.html
提出されたレポートの、結果を同じファイルに上書きするアイデアを参考にしました。
田中もも 実行時引数にファイル名を指定する方法を教えてもらいました。
元のファイルは単語ごとに改行されていました。ファイル内の改行を削除すると、26個の結果すべてが一行で表示されてしまい、実行例のようになりませんでした。 高橋先生に、ファイル内の改行をスペースに変換し、最後に新たな改行を付け加える方法について教えていただきました。ありがとうございます。
大文字、小文字をそれぞれ一文字ずつずらす方法は思いつきました。 しかし、実行例のように文頭のみ大文字にし、あとは小文字に変換する方法については、ファイル内をすべて小文字にしてからsedコマンドで最初の文字だけ大文字にする、改行を消す前に2行目以降のみ小文字にするなど、コマンドを試行錯誤しましたが、思うようにうまく行きませんでした。
trコマンドで一度に数文字ずらす方法と、一字ずつずらす作業を繰り返す方法をどちらも試しました。前者の場合はどうしてもtrコマンドを26回繰り返す方法しか思いつかず、後者ならばfor文やwhile文を駆使すれば短く書けそうだと考え、後者を採用しました。一字ずらす作業を26回行えばいいのではと単純に考えていたのですが、一文字ずらした結果を同じファイル(shift-0.txt)に上書きすることができませんでした。そこで、間にもうひとつのファイル(shift-1.txt)を作って、それを一字ずらしたものをはじめのファイルに上書きする、という方法にし、これを13セット行うことで26字分ずらしました。
実行時引数に指定外のファイルが入力された場合「3 行: [: 引数が多すぎます」というエラーが出るのですが、修正の方法がわからなかったので断念しました。
quiz2.sh.txt
これは、2005年〜2014年の過去10年間について
1、猛暑日(最高気温35度以上の日)の日数
2、真夏日(最高気温30度以上の日)の日数
3、夏日(最高気温25度以上の日)の日数を数えるスクリプトです。
はじめにスクリプトをホームディレクトリにコピーし、ファイル名をquiz2.shに変更してください。
chmod 744 quiz2.sh で実行権限を与えます。 次にITPASSサーバーから圧縮された気象データkadai2_data.tar.gz をホームディレクトリにコピーしてください。tar コマンドを用いてファイルを展開し、中の kadai2_data フォルダーを、スクリプトと同じディレクトリに置きます。
./quiz2.sh と入力し、Enter キーで実行します。
表示に従って数字を入力すると、結果が表示されます。
選択肢以外の数字を入力するとエラーメッセージが表示されます。
問2の実行結果
URL http://itpro.nikkeibp.co.jp/oss/
sed,awk,trコマンドの使い方を調べました。
6.hydroculのメモURL https://hydrocul.github.io/wiki/commands/sed.html
sedコマンドの書き方の参考にしました。
田中もも 日数を数える原理や、for文やcase文で、スクリプトを短くできることを教えてもらいました。
各月のデータをひとつのファイルにまとめる際、ファイル名が各月のものと重ならないようにすると、自分で作ったファイルのみ消せることに気づきました。
スペースや記号の使い分けひとつがエラーの有無につながるという場面に何度か遭遇しました。プログラミングの厳密さの感覚にまだ慣れない部分が多く、もっと精進が必要だと感じました。
気温を変数として扱うともっとシンプルに場合分け出来そうでしたが、コマンド中でそれをうまく表現できませんでした。