2016-05-03 6 views
0

Я пишу сценарий для копирования данных одного столбца в другой столбец. Пробовал с последующей логической почка работала техника его подводит о для улицы/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 
+0

ваши теги говорят bash, но ваш скрипт - ksh. подумайте о добавлении тега ksh и удалении тега bash, чтобы ваш вопрос дошел до целевой аудитории. –

ответ

0

Я не совсем уверен, что я понимаю намерения вашего сценария, но я могу выбрать одну строку, которая выглядит подозреваемый ...

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 

Лучше делать все манипуляции tempFile в AWK

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.

+0

Привет, Майкл, Спасибо, что указали мне несколько важных вещей. Я обновил свой пост, кажется, что все отлично, за исключением того, что я получаю «неполную инструкцию в конце файла». пожалуйста посоветуй. – saurav

+0

Ну ... Дело в том, что переписывание вопроса заставляет ответ просто «уйти» ... Лучше бы вернуть ваш вопрос и спросить другого позже .... То, что я вижу выше, хотя это то, что вы, вероятно, нужно указать свой пароль - двойные кавычки вокруг «$ 1» и «$ cassPassword». Это также лучшая форма для удаления кошки с ... 'sed -e" s/^/update admin.product set cross_refs = '/ "updateupdateProductStatement2> tempFile' думаю, что в новом sed-инструкции отсутствует' s/$ /'/'возможно ??? –