2017-10-10 59 views
0

我在Linux中有一個文件。該文件包含表格名稱。根據條件在Linux中創建新文件

現在我想檢查這個文件並根據條件創建文件。

table=${} 
validateTable=$(hive --database "${hivedb}" -e "SHOW TABLES LIKE '$table'") 
if [[ -z $validateTable ]]; then 
    Add to file New_imports 
else 
    Add to file Already exists 
fi 

例如:

該文件包含

table1 
table2 
table3 
table4 

在上述表table1table2已經現有。

所以我想兩個文件

1)New_imports爲不存在的 2表)已經存在,存在

new_imports

table3 
table4 

already exists

table1 
table2 

我該如何交流hieve我的結果

#!/bin/bash 
while read table ; do 
    table=${1:1:-1} 
    validateTable=$(hive --database "${hivedb}" -e "SHOW TABLES LIKE '$table'") 
    if [[ -z $validateTable ]]; then 
     echo "$table" >> New_imports 
    else 
     echo "$table" >> Already_exists 
    fi 
done < tableFile 
+0

不知道爲什麼有人甚至低估你的原始Q.哦,好! – shellter

回答

2
#!/bin/bash 
while read table ; do 
    table=$(echo "$table" | sed 's/[][]//g;s/'"'"'//g') 
    validateTable=$(hive --database "${hivedb}" -e "SHOW TABLES LIKE '$table'") 
    if [[ -z $validateTable ]]; then 
     echo "$table" >> New_imports 
    else 
     echo "$table" >> Already_exists 
    fi 
done < tableFile 

應該讓你開始。做出這樣的防彈,並且可以接受爭論還需要做更多的工作。

管理輸出文件可能需要一些操作。請注意,使用>>意味着追加,所以每次運行時都需要刪除這些文件或進行管理。我建議嵌入在文件名中的日期 - 時間標記讓他們像

echo "$table" >> new_imports.$(/bin/date +%Y-%m-%d.%H:%M) 

另外,我沒有反正有hive來測試這一點,所以這是一個通用的解決方案。

IHTH

+0

我在表格中的文件名就像'['testing_1234']'。從這裏我想獲得'testing_1234'作爲表名並傳遞給腳本。當我這樣做時,腳本不會讀取表名,請檢查我的問題的編輯部分 –

+0

如果運行'hive --database「$ {hivedb}」-e「會發生什麼情況SHOW TABLES LIKE'['testing_1234']' 「'(或''\ ['testing_1234'\]'')(或''\ [testing_1234 \]''(或其他引用))。如果它不起作用,那麼編輯你的Q以顯示cmd-line中的'testing_1234'的工作方式。我今天晚上出去了一段時間,會盡量檢查。祝你好運。 – shellter

+0

唯一適用於'hive --database「的形式$ {hivedb}」-e「SHOW TABLES LIKE testing_1234」'是'testing_1234'只有當表格像'testing_1234'這樣的表不能工作與其他報價 –