2014-12-13 93 views
0

基本上我需要找到三,我们的网络共享四个几百* .DB3文件,对所有的人都执行一个脚本SQLite3的,提取输出到一个新的DB3文件,甚至CSV文件;但我的shell脚本非常生锈,我会很感激任何帮助。Shell脚本+ SQLite3的

使用Windows CLI或东西,可以在Cygwin执行,我将如何建立一个脚本来搜索最多的所有文件,三个已命名的股份(或安装的驱动器字母)与特定的文件扩展名(* .DB3)店这些完整的路径和文件名在数组或文件中,然后删除任何重复的文件名。

对于此列表中的所有文件,然后我需要针对所有这些文件运行预定义的SQLite3.exe脚本(以下示例),并将此数据输出到新的DB3文件或甚至CSV文件中。

SELECT Product.Type AS 'Product', Product.Identifier AS SKU; 

回答

0

基本的步骤是创建一个适当格式化的文件名列表。其中,文件名是第一列下面创建一个文件,在第二,制表符分隔的完整路径。

find /share/one /path/to/share/two \ 
    /export/third/share -type f -name '*.DB3' -printf '%f\t%p\n' 

将其传递到sort | awk并创建一个简单的脚本来打印唯一的名称。重复项目的顺序是否重要?也许你想检查哪些重复的是老年人,而不是一味只保留第一或最后?但是这里有一个简单的Awk脚本,它可以代替前者。

awk -F '\t' '!a[$1]++ { print $2 }' 

要连接件,运行find | sort | awk | xargs sqlite3 'your commands'

如果你需要的东西多一点参与,你可以阅读在一个循环的非重复的文件列表:

find /share/one /path/to/share/two \ 
    /export/third/share -type f -name '*.DB3' -printf '%f\t%p\n' | 
sort | 
awk -F '\t' '!a[$1]++ { print $2 }' | 
while read file; do 
    sqlite3 "complex things with $file; more things; commit; done; etc" 
done >output 
+0

第二部分的问题是如何使用阵列喂sqlite3的可执行文件,并运行连接,查询和分离命令为每个数据库。每个数据库文件有: 将“文件名”附加为db1 go SELECT Product.Type AS'Product',Product.Identifier AS PartNo,GROUP BY Product.Identifier; 分离DB1距离SELECT statment输出,每个数据库文件,我需要再需要发送至其他数据库,收集所有的数据库,或者csv文件也将工作信息。 – rustyadmin 2014-12-13 19:29:37

+0

不能以'sqlite3'足够熟练地覆盖部分,它是不是在原来的问题非常明确的;但用另一个提示更新了答案。 – tripleee 2014-12-13 20:31:58