テキストファイルをSQLで操作する(bluewindのhttpキーワードのマージ)

背景

  • シェルで、テキストファイル同士を、SQLで操作したいことが多い。
    • とりあえず今回は、bluewindのキーワード(URLのみ)を複数PC間での共有をしたい。
  • 用はcsvODBCプロバイダーと、それの簡易操作用のコマンド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";
}

関連情報

  • excelファイルをSQLで操作する方法もある