GNU Awk 3.0.6 + multi-byte extension 1.15
今回は 9個 有る フィールド に対して 5番目 から 9番目 まで 出力 さ せる ということで 作成 してみる。大きさ、月、日、時間(年)、ファイル名
Pmt> ls -l ../../ 合計 12 -rw-r--r-- 1 nyan users 749 1月 13日 22:02 016_shell.sh -rwxr-xr-x 1 nyan users 92 3月 2日 1997年 jjkhj* drwxr-xr-x 3 nyan users 4096 1月 13日 21:56 u_data/
簡単に考えると この様に なるでしょう
Pmt> ls -l $* | awk '{ print $5,"\t",$6,"\t",$7,"\t",$8,"\t",$9}' 37 1月 13日 22:23 017_scrpt.sh 4096 1月 13日 22:23 u_data/
awk の 部分を sh に組み込むのは そのままの 条件で 良いようですが
Pmt> cat 017_scrpt.sh #!/bin/sh # file name : 017_scrpt.sh ls -l $* | awk '{ print $5,"\t",$6,"\t",$7,"\t",$8,"\t",$9 }'
試行してみると
Pmt> source 017_scrpt.sh 103 1月 13日 22:34 017_scrpt.sh 4096 1月 13日 22:23 u_data/
で 良いのでしょう、というわけで これに まず ヘッダー を つけてみましょ う
sh スクリプトとして
Pmt> cat 018_scrpt.sh #!/bin/sh # file name : 018_scrpt.sh ls -l $* | awk ' BEGIN { print "大きさ","\t","月","\t","日","\t","時間(年)","\t","名前"} {print $5,"\t",$6,"\t",$7,"\t",$8,"\t\t",$9} '
試行してみると
Pmt> source 018_scrpt.sh 大きさ 月 日 時間(年) 名前 103 1月 13日 22:34 017_scrpt.sh 207 1月 13日 22:47 018_scrpt.sh 4096 1月 13日 22:23 u_data/
空白の行が出力されています というのは フィールドが 9個 無い物も有り その場合は その行のフィールドが 5〜9に存在していないと 考えら れます
この様なものを考えて
Pmt> cat 019_scrpt.sh #!/bin/sh # file name : 019_scrpt.sh ls -l $* | awk ' BEGIN { print "不明1","\t","不明2","\t","\t","大きさ","月","\t","日","\t","時間(年)","\t","名前"} {print $1,"\t",$2,"\t",$5,"\t",$6,"\t",$7,"\t",$8,"\t\t",$9} '
試してみると
Pmt> source 019_scrpt.sh 不明1 不明2 大きさ 月 日 時間(年) 名前 合計 16 -rw-r--r-- 1 103 1月 13日 22:34 017_scrpt.sh -rw-r--r-- 1 207 1月 13日 22:47 018_scrpt.sh -rw-r--r-- 1 261 1月 13日 23:07 019_scrpt.sh drwxr-xr-x 3 4096 1月 13日 22:23 u_data/
従って その行は 出力しない というより フィールドが 9個 有る物だけを 対象に しよう マッチするものを対象 まず 最初が ”-”で始まるものを 対象に する事にすれば
フィールド 1 の 最初が ”-”で始まるもの を 抽出 即ち
Pmt> cat 020_scrpt.sh #!/bin/sh # file name : 020_scrpt.sh ls -l $* | awk ' BEGIN { print "大きさ","\t","月","\t","日","\t","時間(年)","\t","名前"} /^-/ {print $5,"\t",$6,"\t",$7,"\t",$8,"\t\t",$9} '
試してみると
Pmt> source 020_scrpt.sh 大きさ 月 日 時間(年) 名前 103 1月 13日 22:34 017_scrpt.sh 207 1月 13日 22:47 018_scrpt.sh 261 1月 13日 23:13 019_scrpt.sh 212 1月 13日 23:14 020_scrpt.sh
”ls -l”の 趣旨からは 外れるが 一応 良いであろう 失われたものは ディ レクトリ が 無くなった これを 救済せねば いけないが まず これで ファイル の 数と 合計の 大きさを 求めるものを 作成 してみよう。
内容は
Pmt> cat 021_script.sh #!/bin/sh # file name : 021_scrpt.sh ls -l $* | awk ' BEGIN { print "大きさ","\t","月","\t","日","\t","時間(年)","\t","名前"} /^-/ {print $5,"\t",$6,"\t",$7,"\t",$8,"\t\t",$9 sum+=$5 ++filenum } END { print "合計の大きさ :",sum,"bytes("filenum "files)" } '
試行すると
Pmt> source 021_script.sh 大きさ 月 日 時間(年) 名前 103 1月 13日 22:34 017_scrpt.sh 207 1月 13日 22:47 018_scrpt.sh 261 1月 13日 23:13 019_scrpt.sh 212 1月 13日 23:30 020_scrpt.sh 309 1月 13日 23:28 021_script.sh 合計の大きさ : 1092 bytes(5files)
実績のもので 確認すると
Pmt> source u_data/016_shell.sh BYTES FILE 103 017_scrpt.sh 207 018_scrpt.sh 261 019_scrpt.sh 212 020_scrpt.sh 309 021_script.sh <dir> u_data/ Total: 1092 bytes (5 files)
取り敢えずは いいのではないかいな? まだ ディレクトリが 無い状態であ るが、参考にしたものは これに条件 フィールドの数 9個 というのを 追記 し ている 即ち
/^-/ {print $5,"\t",$6,"\t",$7,"\t",$8,"\t\t",$9
sum+=$5
++filenum
}
======================================
NF == 9 && /^-/ {print $5,"\t",$6,"\t",$7,"\t",$8,"\t\t",$9
sum+=$5
++filenum
}
では
内容は
Pmt> cat 022_script.sh #!/bin/sh # file name : 022_scrpt.sh ls -l $* | awk ' BEGIN { print "大きさ","\t","月","\t","日","\t","時間(年)","\t","名前"} NF == 9 && /^-/ {print $5,"\t",$6,"\t",$7,"\t",$8,"\t\t",$9 sum+=$5 ++filenum } END { print "合計の大きさ :",sum,"bytes("filenum "files)" } '
試行してみる 併せて 他の スクリプトでの 結果も 示しておく
Pmt> source 022_script.sh 大きさ 月 日 時間(年) 名前 103 1月 13日 22:34 017_scrpt.sh 207 1月 13日 22:47 018_scrpt.sh 261 1月 13日 23:13 019_scrpt.sh 212 1月 13日 23:30 020_scrpt.sh 309 1月 13日 23:28 021_script.sh 320 1月 13日 23:43 022_script.sh 合計の大きさ : 1412 bytes(6files) Pmt> source 021_script.sh 大きさ 月 日 時間(年) 名前 103 1月 13日 22:34 017_scrpt.sh 207 1月 13日 22:47 018_scrpt.sh 261 1月 13日 23:13 019_scrpt.sh 212 1月 13日 23:30 020_scrpt.sh 309 1月 13日 23:28 021_script.sh 320 1月 13日 23:43 022_script.sh 合計の大きさ : 1412 bytes(6files) Pmt> source u_data/016_shell.sh BYTES FILE 103 017_scrpt.sh 207 018_scrpt.sh 261 019_scrpt.sh 212 020_scrpt.sh 309 021_script.sh 320 022_script.sh <dir> u_data/ Total: 1412 bytes (6 files)
今の 素直な感想は 過剰品質である 大きな目で 見ると この 機能を 付加す るのは 必要なのであろうが?
あと ディレクトリと他の 条件は 次の 所で 追記 していこう 今日は 此処 まで
にゃんたろう 拝!
GNU Awk 3.0.6 + multi-byte extension 1.15
2007年 1月14日 (日) 00:01:09 JST 作成