背景
- シェルで、テキストファイル同士を、SQLで操作したいことが多い。
- とりあえず今回は、bluewindのキーワード(URLのみ)を複数PC間での共有をしたい。
- 用はcsvのODBCプロバイダーと、それの簡易操作用のコマンドIFがあればいいが、IFとなるコマンドプログラムをPerl書きたいので、DBD::CSVを使う。
方法
#!/bin/perl
use DBI;
$dbh = DBI->connect(qq{DBI:CSV:f_dir=.;csv_sep_char=\t});
$dbh->{'csv_tables'}->{'wind'} = {
'col_names' => ["keyword", "type", "iindex", "quoteparam", "command",
"isdir", "icon", "dir"],
'eol' => "\r\n"
};
$dbh->{'csv_tables'}->{'rhwind'} = {
'col_names' => ["keyword", "type", "iindex", "quoteparam", "command",
"isdir", "icon", "dir"],
'eol' => "\r\n"
};
$sth = $dbh->prepare("SELECT keyword FROM rhwind");
$sth->execute;
$lst = '\'' . $sth->fetch->[0] . '\'';
while(my $v = $sth->fetch) {
$lst .= ',\'' . $v->[0] . '\'';
}
$sth = $dbh->prepare("SELECT * FROM wind WHERE NOT keyword IN ($lst) AND command LIKE '%Command=http%'");
$sth->execute;
while(@row = $sth->fetchrow_array) {
print join("\t", @row) . "\n";
}