[Litz' UNION] > [Dal Segno] > [UNIXたん] > [その8] // [その7][その9]

UNIXたん その8

第5回の復習

実習1

[1] ls -lg > sample-file とした後、ファイルを覗いてみる。
[2] sort +4 -nr < sample-file > sample-file2とし、ファイルを確認。
[3] 同様の方法で、2つのディレクトリの中でサイズ順に5つのファイルをリストアップ。

[3] sample-fileに書き込み→上書き→ソート→5行表示(head -5)

実習2

[1] ps -axu | less, ps -axu | sort +10 | less などをやってみる。
[2] パイプを3回使う例を考え、試してみる。

[2] 第6回に解説したフィルタを用いれば余裕。

実習3

[1] teeや先読み評価に関して、例と同じことをやってみる。
[2] alias Rnum 'echo "`ls README* | wc -w` Readme files exist."' として実行してみる。
(sh系シェルの場合は Rnum=... と書く)

実習4

[1] .bashrc か .tcshrc を編集し、とりあえずプロンプトだけでも編集してみる。
[2] シェルのマニュアルなどを参考に、いろいろと設定をしてみる。
(sh系シェルの場合は Rnum=... と書く)

実習5

[1] エイリアスをいろいろ試してみて、便利そうなものを初期設定する。
[2] 2引数の順番を逆にして表示するコマンドswapを作ろう。

[2] エイリアスを使用。引数1は\!:1、引数2は\!:2、表示するのはecho

実習6

ログインする度に「You use **kB in this system.」とディスク使用量を表示するようにする。

du(指定ディレクトリ以下のディスク使用量を再帰的に表示する)を使用。
個人的にあまり気が進みません。やるとしたらawkを使いたい。

課題

[1] シェルの設定をなるべくかっこ良く(合理的に)してみよう
[2] emacsの設定をやってみよう
[3] viの設定をやってみよう
[4] 今日の日付のついたファイルをエディタが開く、というコマンドを作ろう

[1][2][3] 検索してみるしかない。
[4] vi(emacs)の引数に…(先読み評価を参照)

第6回の復習

実習1

根性の限り、フィルタプログラムを試してみよう。

実習2

[1] どこかのwebページ(こことか)をファイルに保存し、emacsで開く。
[2] [esc]-[X] "replace-regexp" とする。
[3] Replace regexp: <[^>]*> とし[Enter]。これは置換対象の意
[4] Replace regexp <[^>]*> with : の後に何も入力せずに[Enter]。これは置換後の文字列の意
[5] タグが除去されたのを確認。
[6] 今度はタグのみを残す仕様にしてみる。

[6] >[^<]*< を >< に置換するとかね

実習3

sedをもっといろいろ試してみよう。

課題

[1] Takahashi か Takahasi を含む行を抽出するにはどうすれば良い?
[2] ファイルの中身の行頭全てに > という文字を付け加えるにはどうすれば?
[3] ファイル中で日付が 2004.12.31 という形式で記述されているのを 31/Dec/2004 に修正。

[1] /Takahash?i/{p} としか考えられない。
[2] 額面通り s/\(^.*$\)/>\1/p とするも良し。
[3] s/(\d+)\.(\d+)\.(\d+)/\3\.\2\.\1/gがどうも使えんから、
s/\([0-9]\{1,\}\)\.\([0-9]\{1,\}\)\.\([0-9]\{1,\}\)/\3\.\2\.\1/g;
s/\.01\./\/Jan\//g; ...
とするしかないのか

第7回の復習

実習1

[1] ls -lg | awk '{print $9}' でファイル名の一覧が得られる。
[2] ls -lg | awk -FA '{print $1}' とすると、区切り文字が A になる。
[3] ほかの区切り文字でいろいろやってみよう。

実習2

[1] awkのコマンドをいろいろと使ってみよう。
[2] ps -axu | awk '$2 > 7000{print $2,$1,$NF}' | sort -n の意味は?

実習3

fsize-sumというスクリプトファイルを作る。内容は以下
#!/bin/awk -f
BEGIN{
    sum = 0;
    count = 0;
}
/^-.*$/{
    sum += $5;
    ++count;
}
END{
    print "Total size of ",count " files in this directory is", sum, "byte.";
}
これを実行可能にし、ls -lgA | ./fsize-sumとして動作を確認。

課題

[1] sedと同じ動作をするようにawkを使おう。
[2] 今月の最終水曜日を求めるawkスクリプトを組んで。
[3] 123.456.789.012 を引っくり返して 012.789.456.123 にするようなawkスクリプトを。

[1] 問題自体が何不明だが、文字列の置換はawkにもある。sedの実例をawkでやってみよう。
[2] cal | awk '4つ目のフィールドが整数なら変数にそれを代入。最後にそれを出力'
[3] awk 'BEGIN{FS="."}{$4.$3.$2.$1 の形で出力}' など。

[Litz' UNION] > [Dal Segno] > [UNIXたん] > [その8] // [その7][その9]