【问题标题】:Script to copy one column data to another column将一列数据复制到另一列的脚本
【发布时间】:2016-08-28 21:12:59
【问题描述】:

我正在编写一个脚本来将一列数据复制到另一列。 尝试使用以下逻辑芽没有成功- o/p- 参数个数为0。

我的逻辑- • 我从 admintable 中获取密钥,然后将数据复制到某个 updateupdateStatement 文件中。 • 使用 awk 命令我将特定列数据复制到某个临时文件 • 然后准备一个更新语句,然后执行它。

          #!/bin/ksh
          #
          # Script to Populate cross_refs based on what is in cross_references
          #
          #

          echo "number of parameters is $#"

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

           cassPassword=$1

            #Add column to admin table
            #echo "alter table to add column..."
            #echo "ALTER TABLE admin.product ADD cross_refs Map<String,String>;" > updateTable.cql

            #cqlsh -u dgadmin -p ${cassPassword} -f updateTable.cql

            echo "get keys from cassandra"
            echo "copy admin.product (cross_references) to 'updateupdateProductStatement.cql';" > copyInputs.cql
            cqlsh -u dgadmin -p ${cassPassword} -f copyInputs.cql


            #Convert file that Cassandra created from DOS to Unix
            echo "DOS to Unix conversion..."
            tr -d '\015' <updateupdateProductStatement.cql >updateupdateProductStatement2.cql

            cat updateupdateProductStatement2.cql  >tempFile
            sed -i "s/^/update admin.product set cross_refs = '/" tempFile

            #execute the updated .cql file to run all the update statements
             echo "executing updateupdateProductStatement.cql..."
             cqlsh -u dgadmin -p ${cassPassword} -f tempFile

【问题讨论】:

  • 您的标签是 bash,但您的脚本是 ksh。考虑添加一个 ksh 标记并删除 bash 标记,以便您的问题到达目标受众

标签: sql shell ksh cql cqlsh


【解决方案1】:

我不确定我是否理解您脚本的意图,但我可以挑出看起来可疑的一行...

cat updateFlatFileInputStatements2.cql |awk -F'\t' '{ 19                1              2}'  >tempFile

我认为您想在输出中打印第 19、1 和 2 列...

awk -F'\t' 'BEGIN { OFS="         " }{ print $19, $1, $2 }' updateFlatFileInputStatements2.cql > tempFile

更好的是在 awk

中完成对tempFile 的所有操作
awk -F'\t' "{ print \"update admin.product set my_refs = \" \$19 \" where id = \" $1 \" and effective_date = \" $2 \"';\"" updateFlatFileInputStatements2.cql > tempFile

然后,我在您的文件中看不到 tempFile 的使用位置...或 updateFlatFileInputStatements2.cql 的生成位置。看起来这段代码什么都不做?

updateupdateStatement.cql ...不知道从何而来。然后将其剥离以形成updateupdateStatement2.cql ...然后将其操作为tempFile,但是...您不使用tempFile-而是将updateupdateStatement2.cql发送到cqlsh。该错误可能是您打算将tempFile 发送到最终的cqlsh

【讨论】:

  • 嗨迈克尔,感谢您指出一些重要的事情。我已经更新了我的帖子,似乎一切都很好,除了“文件末尾的声明不完整”。请指教。
  • 嗯...问题是问题的重写使答案只是“消失”...最好恢复您的问题并稍后再问...我什么见上文,您可能需要引用您的密码——“$1”和“$cassPassword”周围的双引号。消除猫也是更好的形式... sed -e "s/^/update admin.product set cross_refs = '/" updateupdateProductStatement2 &gt; tempFile 认为新的 sed 语句缺少 s/$/'/ 也许???
猜你喜欢
  • 2016-03-15
  • 2021-11-28
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多