2016-05-17 53 views
-1

我寫了一個腳本來填充另一列的列。所以,對於下面是我的腳本文件 - 對於我抄列數據到另一個文件 -如何在我的腳本中編寫awk腳本?

script.sh-

echo "number of parameters is $#" 

    if [ $# != 1 ]; then 
    USAGE="USAGE: $0 cassPassword" 
    echo ${USAGE} 
    exit 1 
    fi 

    Password=$1 


    echo "copy home.admin (my_references, id, eff_date) to 'myStatement.cql';" > copyInputs.cql 
    cqlsh -u dgadmin -p ${cassPassword} -f copyInputs.cql 

    cp myStatement.cql updatestmt.cql 

後,我創建了一個單獨的awk腳本,一些字符串操作 my_refs .awk通過

 #!awk 
     BEGIN { FS = "," } # split fields on comma 
     { 

     doing some manipulation 

sub(/,$/, "", crefs) # remove trailing comma 
crefs=crefs"}" 
print "update table set cross_refs ="crefs" where id='"$(NF-1)"' and effective_date ='"$(NF)"'" 
    } 

運行AWK-F my_refs.awk updatestmt.cql> updateStatement.cql 在updateStatement.cql獲得價值再次回到我的sh腳本,做一些修改之後。

sed -i "s/$/';/" updateStatement.cql 

我不能寫awk腳本我的shell腳本文件中?這樣我就可以避開兩個步驟

+0

這可能很有可能在沒有將數據寫入文件的情況下完成。你需要所有這些* .cql文件嗎? –

+0

先生,我正在做一些更新操作對cassandra分貝使用sh – saurav

+0

您的腳本創建「copyInput.sql」,「myStatement.cql」,「updatestmt.cql」和「updateStatement.cql」 - 你需要copyInput文件或腳本完成後myStatement文件或updatestmt文件? –

回答

0

是 - 您可以在awk命令粘貼到你的shell腳本:

# beginning part omitted... 
cp myStatement.cql updatestmt-temporary.cql 
awk -f my_refs.awk updatestmt-temporary.cql > updateStatement.cql 
sed -i "s/$/';/" updateStatement.cql 
rm updatestmt-temporary.cql 
+0

先生,這部分將如何工作?因爲我在腳本中粘貼了awk代碼 awk -f my_refs.awk updatestmt-temporary.cql> updateStatement.cql my_refs.awk是我的awk文件的名稱?但在這裏我要給我什麼? – saurav

+0

@okla是的,'my_refs.awk'應該是持有awk程序的文件的名稱。該命令在'script.sh'中的作用與在命令行中鍵入命令時相同。 – cxw

1

我懷疑你可以這樣寫:

#!/bin/bash 
if [[ $# -eq 0 ]]; then 
    echo "usage: $0 cassPassword" >&2 
    exit 1 
fi 

echo "copy home.admin (my_references, id, eff_date);" | 
cqlsh -u dgadmin -p "$1" | 
awk ' 
    BEGIN { 
     FS = "," 
     update_fmt = "update table set cross_refs=%s where id='\''%s'\'' and effective_date='\''%s'\'';" 
    } 
    { 
     # ... some manipulation: I assume you create "crefs" variable here 
     sub(/,$/, "}", crefs) 
     printf(update_fmt, crefs, $(NF-1), $NF); 
    } 
' > updateStatement.cql 

慶典不允許你作爲嵌入單引號單引號字符串。整個awk腳本是單引號字符串,我想把單引號放在「update_fmt」字符串中。這就是爲什麼你看到奇形怪狀的'\''

echocqlshawk命令都配管連接,所以你不需要任何臨時文件。我假設cqlsh是正確的,從標準輸入讀取命令並寫入標準輸出。