我编写了一个脚本来填充另一列的列。所以下面是我的脚本文件 - 为此我将列数据复制到另一个文件 -
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
我能不能在我的shell脚本文件中写入awk脚本?这样我就可以避免两步过程
答案 0 :(得分: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
bash不允许您在单引号字符串中嵌入单引号。整个awk脚本是单引号字符串,我想在“update_fmt”字符串中放入单引号。这就是为什么你看到奇怪的'\''
echo
,cqlsh
和awk
命令都与管道连接,因此您不需要任何临时文件。我假设cqlsh可以从stdin读取命令并写入stdout。
答案 1 :(得分: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