2014-11-25 41 views
0

我開始寫我的第一個大bash腳本,我試圖解決一個問題。如何從文件中的行構建字符串,然後基於結果文件中的行創建文件?

我有一個文件:packagesList.txt,它包含我需要通過sqlplus運行的oracle包的名稱。該文件是這樣的:

ORACLETASK1 
ORACLETASK2 

等等

的文件夾配置包含包命名的文件。他們的名字看起來是這樣的:ORACLETASK1-test.txtORACLETASK2-test.txt和內容看起來完全是這樣的:

ORACLETASK1FUNCTION1(PARAMETER1, PARAMETER2) 
ORACLETASK1FUNCTION1(PARAMETER3, PARAMETER4) 

這同樣適用於在ORACLETASK2

ORACLETASK2FUNCTION1(PARAMETER1, PARAMETER2) 
ORACLETASK2FUNCTION1(PARAMETER3, PARAMETER4) 

現在 - 什麼,我需要做的就是生成一個文件(中環)ORACLETASK1-run.conf這將是這樣的:

ORACLETASK1.ORACLETASK1FUNCTION1(PARAMETER1, PARAMETER2) 
ORACLETASK1.ORACLETASK1FUNCTION1(PARAMETER3, PARAMETER4) 
ORACLETASK2.ORACLETASK2FUNCTION1(PARAMETER1, PARAMETER2) 
ORACLETASK2.ORACLETASK2FUNCTION1(PARAMETER3, PARAMETER4) 

Finallz,我需要生成(在一個循環)一系列SQL文件的F或在ORACLETASK1-run.conf文件中的每一行,將是這樣的:

QUESTION UNRELATED SET AND CLEAR COMMANDS GO HERE 

VARIABLE RC REFCURSOR; 

和最重要的行雲HERE

EXEC :RC := ORACLETASK1.ORACLETASK1FUNCTION1(PARAMETER1, PARAMETER2); 

文件的其餘部分

SPOOL SOME_FILE_NAME_I_DONT_KNOW_HOW_TO_NAME_IT_YET.TXT 
PRINT RC; 
SPOOL OFF 
EXIT; 

也許這問題有點普遍,但我正在尋找任何可能導致我使這個腳本工作的線索......

+1

線索:閱讀文件http://en.kioskea.net/faq/1757-how-to-read-a-file-line-by-line並操縱流中的行http://rute.2038bug.com /node11.html.gz並將輸出連接到一個文件中https://www.mkssoftware.com/docs/man1/cat.1.asp – 2014-11-25 11:37:54

回答

0

這應該讓你在正確的方向前進:

CONFIGDIR="/path/to/config/files" 

while read -r line ; do 
    while read -r config ; do 
    echo "$line.$config" >> "ORACLETASK1-run.conf" 
    done < "$CONFIGDIR/$line-test.txt" 
done < packagesList.txt 

while read -r line ; do 
    sqlfile=$(echo $line | sed -r 's/(.*\..*)\((.*), *(.*)\)/\1.\2.\3/' 
    cat <<_EOCFG_>> "$sqlfile.sql" 
VARIABLE RC REFCURSOR; 
EXEC :RC := $line; 
SPOOL SOME_FILE_NAME_I_DONT_KNOW_HOW_TO_NAME_IT_YET.TXT 
PRINT RC; 
SPOOL OFF 
EXIT; 
_EOCFG_ 
done < ORACLETASK1-run.conf 
0

所以,你需要閱讀的文件了您的腳本是和子文件夾命名的配置。

你需要做的是這樣

for i in *.txt Configuration/*.txt; do 
    [ -e "$i" ] || continue 
    filename=$(echo "$i" | cut -d- -f1) 
    while IFS= read -r aline; do 
     #do something 
    done < $i 
done 

cut命令,是如何得到「ORACLETASK1-的test.txt」文件的第一部分的示例中,結果將是「ORACLETASK1」因爲參數「-d-」

您可以在評論所在的每個文件的每一行上工作。這就是你放置邏輯的地方。

如果對你更簡單,你可以分成兩部分。一個while循環來讀取軟件包列表文件和沒有第一個* .txt的for循環來讀取子文件夾中的文件。

相關問題