専門学校54日目(情報工学)6月27日(木)

1時限~3時限
Linux実習 新しいLinuxの教科書 第2版

前回6月20日はスーパーユーザ、標準入出力、リダイレクト、パイプラインなどを学びました。

今日は12章テキスト処理から学びます。
データやシステムの設定項目がテキストで表現されており、これらテキストを扱うのがLinuxでの作業となる。
1限目は3つのコマンドを学び自分で実行してみる。

wcコマンド
入力ファイルの行数、単語数、バイト数を数えるコマンド。オプションを指定することもできる。行数を表示するのが -l、単語数は -w、バイト数が -c
wcは情報を抽出するためのコマンド。

sortコマンド
テキストをソートするコマンド。

psコマンド
仕事をしている最中のプロセスを表示してくれる。PID(プロセスID)が表示される。

uniqコマンド
重複した行を取り除くだけ。

cutコマンド
cut -d <区切り文字> -f <フィールド番号> [<ファイル名>]
cut -d , -f 3 file1.txt
などのように書く。区切り文字をカンマとして、3列目を取り出す。-dオプションを付けないと、デフォルトでタブ区切りが指定される。

trコマンド
文字を変換、削除する

tailコマンド
以前にも少しやりましたが、末尾部分を表示するコマンド
ファイルへの追記を監視するのに使う。
tail -f output.log
であらかじめtouchコマンドで作ったoutput.logファイルへの追記の監視ができます。
コマンドを実行後、もう一つpowershellを起動してUbuntuを立ち上げカレントディレクトリを移動して
echo 追記したい文字列 >> output.log
コマンドでechoの出力先がoutput.logへと変更されて追記されます。その追記した文字列が監視しているpowershellのほうで確認できます。

diffコマンド
gitを使って開発することがあるかもしれません。その時に使います。ソースコードなどに対して編集前と編集後の変更内容を確認するためによく使われる。-uをオプションにするとユニファイド形式で差分が表示される。

13章
grepコマンド
これは文字列を検索するコマンドで以前も少し習いました。ファイル名に特定の文字列を含むものを表示させたりといったことができます。

次回は正規表現を学び、それからシェルスクリプトを作っていきます。

本日のレポートは以下の通りです。

■実際に実施したコマンド
$ wc crontab
$ ls / | wc -l
$ vi file1.txt
$ sort file1.txt
$ ps
$ ps | sort -k 5
$ ls -l | sort -k 6
$ vi number.txt
$ sort number.txt
$ sort -n number.txt
$ sort -r file1.txt
$ ls -l /bin/ | sort -rn -k 5
$ ps x | sort -k 5
$ vi file2
$ vi file3
$ uniq file2
$ uniq file3
$ sort file3 | uniq
$ sort -u file3
$ sort file2 | uniq -c
$ sort file2 | uniq -c | sort -rn
$ sort file2 | uniq -c | sort -n
$ cut -d : -f 7 /etc/passwd
$ cut -d : -f 6,7 /etc/passwd
$ cat /etc/passwd | tr : ,
$ cat /etc/passwd | tr abc ABC
$ cat /etc/passwd | tr -d '\n'
$ tail /etc/passwd
$ touch output.log
$ tail -f output.log
$ echo Hello >> output.log
$ echo food >> output.log
$ cp ~/.bashrc .bashrc.org
$ diff .bashrc.org ~/.bashrc
$ grep bash /etc/passwd
$ grep -n bash /etc/passwd
$ grep -v bash /etc/passwd
$ ls /etc | grep cron




■疑問点1
wcコマンドでファイル名を指定しないとどうなるか
■調査結果・解決方法1
wcだけで実行したところ、キーボードからの入力を受け付ける標準入力になりました。Ctrl+cで終了させることができました。

■疑問点2
プロセスID(PID)とは何か
■調査結果・解決方法2
実行中のプロセスを一意に識別するための番号。プロセスはコンピュータ上で実行中のプログラムのこと。


■疑問点3
diffコマンドのユニファイド出力形式の見方
■調査結果・解決方法3
最初の2行は指定した差分を見るファイル名
@@の行は差分がファイルのどの行かを表す
-○○は比較元のファイルに存在する文字列
+○○は比較先ファイルに存在する文字列


■振り返りレポート
※実施した内容を以下に列挙する
・wcコマンドでファイルの情報を抽出しました。
・sortコマンドでアルファベット順、数値順、逆順に並び替えました。
・uniqコマンドで重複業を取り除き、-cオプションで重複行数も表示させました。
・cutコマンドを使い、ファイルから指定したフィールドを取り出して表示させました。
・trコマンドで文字の置換、削除を行いました。
・もう一つpowershellを起動して、tailコマンドでファイルへの追記を監視しました。
・diffコマンドで変更などした差分を表示させました。
・grepコマンドで文字列の検索をしました。


4時限~6時限
国家試験対策 アルゴリズムとデータ構造

今日からアルゴリズムとデータ構造の教科書です。
p.7-
領域の概念
■変数
変数にデータを入れる操作を代入という。
変数aに5を入れたり、aに変数bを代入したりできる。

変数の性質
変数には一つしかデータを入れられない。新しく代入すると古いデータは上書きされる。データを代入する前は変数に何も入っておらず、この状態を未定義という。

定数
プログラム中で値の変わらないデータのことをいう。
文字定数はシングル(またはダブル)クォーテーションで囲みます。

■三つの基本構造
アルゴリズムは順次(連続)、選択(分岐)、反復(繰返し)という基本構造があります。複雑なアルゴリズムもこれらを組合せて作れる。この辺りはJava基礎の授業でも習いましたが、言葉が若干異なっています。

第2章
ここもささっといこうかなと思います。
■流れ図(フローチャート)
これはコンピュータ概論の教科書でも少し触れました。
①端子記号でプログラムの開始と終了を表す。
②処理記号は長方形で表す。
③入出力記号は平行四辺形などで表す。
④定義済み処理記号はサブルーチン(関数)を実行するのに使い、長方形の両端に線が入っていて、3区画に分かれた形になる記号。サブルーチンを呼び出すと、呼び出し元のプログラムは一時停止し、サブルーチンの終了を待つ。
⑤判断記号はひし形で表し、条件分岐を示す。
⑥流れ線は処理の流れがわかるように引く線のこと。なるべくシンプルに書く。
⑦結合子は図が用紙に収まらないときに番号を丸で囲い、つながりを示すためのもの。
⑧注釈記号は各記号に対して説明などを書くのに使う。

■連続型
流れ図で表現したときに分岐せず一本道で入出力記号をつなげたもの。
a、bを入力させ、和、差、積、商を計算して、出力するような一本道のプログラム。

■選択型
判断記号の条件の書き方は2種類ある。
⑴記号内に条件式を記述し、成立するかしないかで分岐させる(a>10のように記述)
判断記号のひし形の外側にYes、Noを記述して条件次第でどちらかに進む。

⑵比較する2つのデータを記述し、成立する等号、不等号を選んで分岐させる(a:10のように記述)
ひし形の外側に等号、不等号を記述して成立する記号のほうに処理が進む。3方向以上への分岐もできる。

判断記号内を埋めるのと、流れ図を埋める例題を解きました。a=500、a≠500などと書いて埋める問題です。ただ特別な場合でもない限り≠は使いません。aとbの値を入れ替えるために変数wを導入して入れ替えるアルゴリズムを埋める問題もありました。先生の説明では変数wは作業のworkからだそうです。Javaの先生はwはxやyなどのアルファベット順と区別するための変数だとおっしゃっていました。

■複合条件
複数の条件を組み合わせて、一つの判断記号の中に記述する。
⑴論理積条件
条件AとBの両方が真なら処理Xを実行し、それ以外の場合は処理Yを実行するといった具合です。
⑵論理和条件
条件AとBのいずれかが真なら処理Xを実行し、両方が偽の場合は処理Yを実行する。

●反復型(繰返し型)
判断記号と繰返しを組み合わせるか、ループ端記号を使い表す。
3つのパターンがあり、繰り返し処理前に条件の判定をする前判定型、繰り返し処理を実行したのちに条件判定をする後判定型、繰返し処理中に条件判定をする中間判定型がある。
前判定:条件判定→処理X→処理Y
後判定:処理X→処理Y→条件判定
中間判定:処理X→条件判定→処理Y
というような流れで判定する。

例題では1~10の合計を求めるプログラムの穴埋めをしました。

■ループ端記号
ループ始端と終端があり、それで挟まれた部分を繰り返し処理する。 ループの中にループがあるネスト構造になっていることもある。始端と終端はセットになっており、流れ図の中で始端と終端の数は一致します。ループ端を使う場合は、前判定と後判定のどちらかがほとんどで、中間判定型はbreakさせるなどで書くこともできるが、ループ端は使わない書き方をする。

■不定回数の繰返し
ループ端を使用する書き方と使用しない書き方がある。使用する書き方では、ループ始端に終了条件を書く。使用しない場合は、判断記号に継続条件を書き、継続する場合の先の処理の下と判断記号を流れ線でつないでループを作る。
例題では、変数nameとaddrの入力を合計2回書いていますが、判断分岐や繰返しの終了条件で判定する場合に変数が未定義だと条件の正しい判断ができないため2か所で入力する流れ図となっている。これを二度読み処理という。while文で最初に条件判定をするときに条件式が未定義でないことが求められるのと同じです。

■一定回数の繰返し
繰返しの回数が決まっている反復型のこと。
1~10までの数を表示するアルゴリズムがあるとする。
これもループ端を使用する書き方と、使わない書き方がある。
①ループ前に変数nに1を代入し初期化する。
②そして継続・終了条件を書く。
③それから変数nを出力。
④再初期化式で変数nを+1する。
という繰返しになっている。繰り返し回数を計測する変数はここでnであるが、これをカウンタ変数という。
ループ端に変数名、初期値、終値、増分をまとめて書くことができる。
(n:1、10、1)などと書く。変数名がnで、初期値が1、終値は10、増分が1を意味する。しかし、後判定型にはこの表記法は使えない。


第3章 擬似言語の基本パターン
擬似言語ではプログラム中で使用するすべての変数をあらかじめ宣言しておく必要がある。
同じデータ型はカンマで区切り同時に変数を宣言できる。
←記号で宣言と同時に代入もできる。

擬似言語では処理の一つ一つを文という。文のまとまりをブロックという。
代入は←で矢印の先に代入する。
手続きまたは関数の実行は、手続き名か関数名(引数)と書く。

擬似言語で選択型(if文)は開始にifを終了にendifを書く。case文はない。条件が真の時に実行する処理はifの後に字下げをして書く。条件が偽の時の処理はelseを使いそのあとに字下げして処理を書く。条件が複数ある場合はelseifを使う。条件が複数ある場合は上から順に条件を評価し、最初に真となった条件を実行する。プログラム的には字下げしなくても実行できるがしないと非常に分かりにくくなります。4文字分くらい字下げするのが一般的です。エディターによっては自動で字下げしてくれるものもあります。

擬似言語では条件の記述が比較演算子でなく日本語で表現される。
a>=10ならaは10以上というように表されます。

続きは反復型からで次回にします。

この記事が気に入ったらサポートをしてみませんか?