2014-12-13 48 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