2016-05-03 11 views
0

Ich schreibe ein Skript, um eine Spalte Daten in eine andere Spalte zu kopieren. Versuchte mit folgenden nur knapp sein Ziel Logik Knospe arbeitete out- o/p- Anzahl der Parameter ist 0.Skript zum Kopieren von Daten einer Spalte in eine andere Spalte

Mein Logik- • ich die Schlüssel aus dem admintable bekam und dann die Daten zu einem gewissen updateupdateStatement Datei kopiert. • Mit dem Befehl awk kopierte ich bestimmte Spaltendaten in eine temporäre Datei • Bereitete dann eine update-Anweisung vor und führte sie dann aus.

  #!/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

Ihre Tags sagen bash, aber Ihr Skript ist ksh. Überlegen Sie, ob Sie ein ksh-Tag hinzufügen und das Bash-Tag entfernen, damit Ihre Frage die Zielgruppe erreicht. –

Antwort

0

Ich bin nicht absolut sicher, dass ich die Absicht des Skripts zu verstehen, aber ich kann eine Zeile, die verdächtig aussieht auszusuchen ...

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

Ich glaube, Sie 19 Spalten ausdrucken möchten, 1 und 2 die Ausgabe ...

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

Besser ist es, alle Manipulation von tempFile in awk zu tun

awk -F'\t' "{ print \"update admin.product set my_refs = \" \$19 \" where id = \" $1 \" and effective_date = \" $2 \"';\"" updateFlatFileInputStatements2.cql > tempFile 

Dann wieder, sehe ich nicht in der Datei, wo tempFile verwendet wird ... oder wo updateFlatFileInputStatements2.cql erzeugt wird. Sieht so aus, als ob dieser Code nichts tut?

updateupdateStatement.cql ... weiß nicht, woher das kommt. Dies wird dann entfernt, um updateupdateStatement2.cql ... zu bilden, die dann manipuliert wird, um tempFile zu werden, aber ... Sie nicht tempFile verwenden - stattdessen senden Sie updateupdateStatement2.cql zu cqlsh. Der Fehler könnte sein, dass Sie stattdessen tempFile an Ihre endgültige cqlsh senden wollten.

+0

Hallo Michael, danke, dass du mir einige wichtige Dinge aufgezeigt hast. Ich habe meinen Beitrag aktualisiert, es scheint, alles ist in Ordnung, außer bekomme "unvollständige Aussage am Ende der Datei". bitte Beratung. – saurav

+0

Nun ... Die Sache ist, dass das Umschreiben der Frage die Antwort einfach "weggehen" lässt ... Es wäre besser, deine Frage zurückzusetzen und später eine andere zu fragen .... Was ich oben sehe, ist, dass du wahrscheinlich bist Geben Sie Ihr Passwort an - doppelte Anführungszeichen um "$ 1" und "$ cassPassword". Es ist auch besser, die Katze zu eliminieren mit ... 'sed -e 's/^/update admin.product set cross_refs =' /" updateupdateProductStatement2> tempFile' denke, die neue sed-Anweisung fehlt ein 's/$/'/'vielleicht ??? –

Verwandte Themen