■OSS-DB Goldの例題、コラム取得のワンライナー
以下の改良版
■OSS-DB Goldの例題をダウンロードして一ファイルにまとめるワンライナー
http://labunix.hateblo.jp/?page=1411910051
$ BASE="http://www.oss-db.jp/measures/"; \
for target in \
sample_gold_management.shtml \
sample_gold_monitoring.shtml \
sample_gold_performance.shtml \
;do \
wget -O - "${BASE}${target}" 2>/dev/null | \
grep "<em>Q." | lv -s | grep -v "★★" | awk -F\" '{print $2}'
done | \
for list in `xargs`;do \
w3m -dump "${BASE}${list}" | grep -v " • English\|ブックマークに登録\|Silver出題範囲\|Gold出題範囲" \
> `echo "$list" | sed s/".shtml"/".txt"/`; \
done; \
for next in gold_sample*.txt;do \
for n in `seq 1 80`;do echo -n "#";done;echo; \
TOTAL=`wc -l "$next" | awk '{print $1}'`; \
HEAD=`nl -ba "${next}" | \
grep "HOME" | \
awk '{if($1>0&&$1<30){print $1+0}}'`; \
TAIL=`nl -ba "${next}" | \
grep "受験対策\$" | \
awk '{if($1>20&&$1<125){print $1}}' | awk '{print $1+0}'`; \
tail -n "$((${TOTAL}-${HEAD}-1))" "${next}" | \
head -n "$((${TAIL}-${HEAD}-2))"
echo "TOTAL=${TOTAL},HEAD=${HEAD}+1,TAIL=${TAIL},THIS=$((${TAIL}-${HEAD}-2))" >&2; \
done > ossdb_gold.log
TOTAL=194,HEAD=26+1,TAIL=95,THIS=67
TOTAL=178,HEAD=26+1,TAIL=79,THIS=51
TOTAL=180,HEAD=26+1,TAIL=81,THIS=53
TOTAL=170,HEAD=26+1,TAIL=71,THIS=43
TOTAL=180,HEAD=26+1,TAIL=81,THIS=53
TOTAL=223,HEAD=26+1,TAIL=124,THIS=96
TOTAL=212,HEAD=26+1,TAIL=113,THIS=85
TOTAL=211,HEAD=26+1,TAIL=112,THIS=84
TOTAL=177,HEAD=26+1,TAIL=78,THIS=50
TOTAL=220,HEAD=26+1,TAIL=121,THIS=93
TOTAL=206,HEAD=26+1,TAIL=107,THIS=79
TOTAL=192,HEAD=26+1,TAIL=93,THIS=65
TOTAL=211,HEAD=26+1,TAIL=112,THIS=84
TOTAL=201,HEAD=26+1,TAIL=102,THIS=74
TOTAL=198,HEAD=26+1,TAIL=99,THIS=71
TOTAL=166,HEAD=26+1,TAIL=67,THIS=39
TOTAL=171,HEAD=26+1,TAIL=72,THIS=44
TOTAL=174,HEAD=26+1,TAIL=75,THIS=47
TOTAL=175,HEAD=26+1,TAIL=76,THIS=48
TOTAL=172,HEAD=26+1,TAIL=73,THIS=45
TOTAL=171,HEAD=26+1,TAIL=72,THIS=44
TOTAL=174,HEAD=26+1,TAIL=75,THIS=47
TOTAL=168,HEAD=26+1,TAIL=69,THIS=41
TOTAL=173,HEAD=26+1,TAIL=74,THIS=46
■1473行
$ wc -l ossdb_gold.log
1473 ossdb_gold.log
■24問
$ grep "^##*\$" ossdb_gold.log | wc -l
24
■問題数以上の重複行
$ sort ossdb_gold.log | uniq -c | sort -nr | awk '($1>=24){print}'
420
26 。
24 例題
24 ※この例題は実際のOSS-DB技術者認定試験とは異なります。
24
24 ませんのでご了解ください。
24 • 採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
24 • 今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい
24 • その他の例題解説
24 • ご質問・ご意見はこちら
24 • ※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えでき
■ページ区切りの前後で集計。
$ grep -4 "^##*\$" ossdb_gold.log | grep -v "^$\|^\-\-\$" | grep ^G | \
sort | uniq -c | awk '{sum+=$1;print};END{print "合計:"sum}'
1 Goldの例題解説「パフォーマンスチューニング - チューニングの実施」
1 Goldの例題解説「パフォーマンスチューニング - ディスクI/Oの分散」
1 Goldの例題解説「パフォーマンスチューニング - 性能に関するパラメータ」
1 Goldの例題解説「パフォーマンスチューニング - 性能に関係するパラメータ(ロック管
1 Goldの例題解説「パフォーマンスチューニング - 性能に関係するパラメータ」
1 Goldの例題解説「運用管理 - データベースの構造(プロセス構造)」
1 Goldの例題解説「運用管理 - データベースの構造」
2 Goldの例題解説「運用管理 - データベースサーバ構築」
1 Goldの例題解説「運用管理 - ホットスタンバイ運用」
1 Goldの例題解説「運用管理 - 運用管理コマンド全般 - PITR」
3 Goldの例題解説「運用管理 - 運用管理用コマンド全般」
1 Goldの例題解説「性能監視 - oid2name」
1 Goldの例題解説「性能監視 - pg_locks」
2 Goldの例題解説「性能監視 - アクセス統計情報、関連パラメータ」
2 Goldの例題解説「性能監視 - アクセス統計情報」
3 Goldの例題解説「性能監視 - クエリ実行計画」
1 Goldの例題解説「性能監視 - テーブル/カラム統計情報」
合計:24
■出題範囲別
$ grep -4 "^##*\$" ossdb_gold.log | grep -v "^$\|^\-\-\$" | grep ^G | \
awk '{print $1}' | \
sed s/"Goldの例題 解説「"//g | sort | uniq -c | \
awk '{sum+=$1;print};END{print "合計:"sum}'
5 パフォーマンスチューニング
9 運用管理
10 性能監視
合計:24
■残るのはtxtのみ。
$ ls gold_sample_1* | column -c 80
gold_sample_111115_01.txt gold_sample_130807_01.txt
gold_sample_111130_01.txt gold_sample_130807_02.txt
gold_sample_111227_01.txt gold_sample_130910_01.txt
gold_sample_120210_01.txt gold_sample_140307_01.txt
gold_sample_120210_02.txt gold_sample_140307_02.txt
gold_sample_120314_01.txt gold_sample_140417_01.txt
gold_sample_130401_01.txt gold_sample_140417_02.txt
gold_sample_130402_01.txt gold_sample_140530_01.txt
gold_sample_130510_02.txt gold_sample_140702_01.txt
gold_sample_130619_01.txt gold_sample_140702_02.txt
gold_sample_130704_01.txt gold_sample_140812_03.txt
gold_sample_130704_02.txt gold_sample_140812_04.txt
■OSS-DB道場の「オススメ!OSSB-DB情報」解説を取得する。
$ BASE="http://www.oss-db.jp/measures/"; \
for n in `seq -w 01 20`;do \
w3m -dump ${BASE}dojo_${n}.shtml | grep -v "ブックマークに登録" > dojo_${n}.txt; \
done; \
for next in dojo_*.txt;do \
for n in `seq 1 80`;do echo -n "#";done;echo; \
TOTAL=`wc -l "$next" | awk '{print $1}'`; \
HEAD=`nl -ba "${next}" | \
grep "認定教材" | \
head -n 1 | awk '{if($1>0){print $1+0}}'`; \
TAIL=`nl -ba "${next}" | \
grep "OSS-DB道場に戻る" | \
tail -n 2 | awk '{if($1>20&&$1){print $1}}' | awk '{print $1+0}'`; \
tail -n "$((${TOTAL}-${HEAD}-1))" "${next}" | \
head -n "$((${TAIL}-${HEAD}-2))"
echo "TOTAL=${TOTAL},HEAD=${HEAD}+1,TAIL=${TAIL},THIS=$((${TAIL}-${HEAD}-2))" >&2; \
done > ossdb_dojo.log
TOTAL=215,HEAD=24+1,TAIL=111,THIS=85
TOTAL=201,HEAD=24+1,TAIL=97,THIS=71
TOTAL=182,HEAD=24+1,TAIL=78,THIS=52
TOTAL=232,HEAD=24+1,TAIL=128,THIS=102
TOTAL=209,HEAD=24+1,TAIL=105,THIS=79
TOTAL=214,HEAD=24+1,TAIL=110,THIS=84
TOTAL=201,HEAD=24+1,TAIL=97,THIS=71
TOTAL=261,HEAD=24+1,TAIL=157,THIS=131
TOTAL=221,HEAD=24+1,TAIL=117,THIS=91
TOTAL=223,HEAD=24+1,TAIL=119,THIS=93
TOTAL=206,HEAD=24+1,TAIL=102,THIS=76
TOTAL=196,HEAD=24+1,TAIL=92,THIS=66
TOTAL=306,HEAD=24+1,TAIL=202,THIS=176
TOTAL=208,HEAD=24+1,TAIL=104,THIS=78
TOTAL=215,HEAD=24+1,TAIL=111,THIS=85
TOTAL=224,HEAD=24+1,TAIL=120,THIS=94
TOTAL=228,HEAD=24+1,TAIL=124,THIS=98
TOTAL=191,HEAD=24+1,TAIL=87,THIS=61
TOTAL=183,HEAD=24+1,TAIL=79,THIS=53
TOTAL=262,HEAD=24+1,TAIL=158,THIS=132
■行数
$ wc -l ossdb_dojo.log | awk '{print $1,"行"}'
1798 行
■コラム数
$ grep "^##*\$" ossdb_dojo.log | wc -l | echo "全 `xargs` 回"
全 20 回
■コラム数以上の重複行は、各コラムの区切りのみ。
$ sort ossdb_dojo.log | uniq -c | sort -nr | awk '($1>=20){print}'
320
20
■見出しのリスト
$ grep -A 10 "^##*\$" ossdb_dojo.log | grep "^第" | awk '{print $0};END{print "合計:"NR}'
第1回 トランザクションについて
第2回 文字列リテラル
第3回 SQL と引用符
第4回 バックアップとリストア、リカバリ
第5回 データ型
第6回 シーケンス
第7回 テキストファイル(CSVなど)の入出力
第8回 NULLって何?
第9回 SELECT 文の FROM 句の省略
第10回 レプリケーションについて(その1)
第11回 レプリケーションについて(その2)
第12回 デッドロックについて
第13回 表別名と列別名
第14回 トランザクションログ
第15回 スキーマ
第16回 権限管理
第17回 日付の計算
第18回 データベースクラスタ
第19回 SELECT文のLIMITとOFFSET
第20回 RDBMSの種類によるUPDATE文の仕様の違い
合計:20
■OSS-DB道場の「OSS-DB入門」解説を取得する。
※画像を取得しないので、読み物だけで良いという人向け。
$ BASE="http://www.oss-db.jp/measures/"; \
for n in `seq -w 01 12`;do \
w3m -dump ${BASE}dojo_info_${n}.shtml | grep -v "ブックマークに登録" > dojo_info_${n}.txt; \
done; \
for next in dojo_info_*.txt;do \
for n in `seq 1 80`;do echo -n "#";done;echo; \
TOTAL=`wc -l "$next" | awk '{print $1}'`; \
HEAD=`nl -ba "${next}" | \
grep "認定教材" | \
head -n 1 | awk '{if($1>0){print $1+0}}'`; \
TAIL=`nl -ba "${next}" | \
grep "OSS-DB道場に戻る" | \
tail -n 2 | awk '{if($1>20&&$1){print $1}}' | awk '{print $1+0}'`; \
tail -n "$((${TOTAL}-${HEAD}-1))" "${next}" | \
head -n "$((${TAIL}-${HEAD}-2))"
echo "TOTAL=${TOTAL},HEAD=${HEAD}+1,TAIL=${TAIL},THIS=$((${TAIL}-${HEAD}-2))" >&2; \
done > ossdb_dojo_info.log
TOTAL=311,HEAD=24+1,TAIL=207,THIS=181
TOTAL=359,HEAD=24+1,TAIL=255,THIS=229
TOTAL=348,HEAD=24+1,TAIL=244,THIS=218
TOTAL=386,HEAD=24+1,TAIL=282,THIS=256
TOTAL=395,HEAD=24+1,TAIL=291,THIS=265
TOTAL=461,HEAD=24+1,TAIL=357,THIS=331
TOTAL=344,HEAD=24+1,TAIL=240,THIS=214
TOTAL=376,HEAD=24+1,TAIL=272,THIS=246
TOTAL=363,HEAD=24+1,TAIL=259,THIS=233
TOTAL=395,HEAD=24+1,TAIL=291,THIS=265
TOTAL=324,HEAD=24+1,TAIL=220,THIS=194
TOTAL=383,HEAD=24+1,TAIL=279,THIS=253
■行数
$ wc -l ossdb_dojo_info.log | awk '{print $1"行"}'
2897行
■コラム数
$ grep "^##*\$" ossdb_dojo_info.log | awk 'END{print NR"回"}'
12回
■重複行
$ sort ossdb_dojo_info.log | uniq -c | awk '($1>=12){print}'
805
12
12 2002年にオークニーを設立し、代表取締役に就任。マッピング・ GIS・LBS・ITS関連プ
12 Geospatial財団日本支部の代表者を務めるなど、FOSS4G(オープンソース地理空間ソフ
12 OSS-DB入門
17 。
12 アドバイザー:
12 トウェア)の普及活動に取り組んでいる。
12 ピング』(Tyler Mitchell原著;オライリー・ジャパン発行)の翻訳、Open Source
12 ロジェクトのビジネスコンサルティングを経て、現在は会社経営の傍ら、『入門Webマッ
12 監修:
12 執筆:
12 森亮氏 株式会社オークニー代表取締役(LPI-Japanビジネスパートナー)
■コラムの目次
$ grep -A 7 "^##*\$" ossdb_dojo_info.log | grep "^第" | awk '{print $0};END{print "合計:"NR}'
第1回 PostgreSQLのインストール
第2回 ユーザ管理とセキュリティ
第3回 データベースとテーブルの作成
第4回 データベースの正規化
第5回 SQL基礎I
第6回 SQL基礎II
第7回 トランザクション
第8回 バックアップ・リストア
第9回 パフォーマンス・チューニング(前編)
第10回 パフォーマンス・チューニング(後編)
第11回 Webアプリケーションとの連携(前編)
第12回 Webアプリケーションとの連携(後編)
合計:12