2016-05-17 85 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是正确的,从标准输入读取命令并写入标准输出。