Echo variable par colonnes

Variable 1:

'file:'"$AI_SERIAL_LOOKUP"'/GDFS_Off_Peak_Lkp.txt' 'file:'"$AI_SERIAL_LOOKUP"'/mssu2_massched.mssulrm_lkup_'"$AI_PHASE"'.txt' 'file:'"${AI_SERIAL_TEMP}" 

Variable 2:

 $PRIVATE_SCRIPT/2_ctc_rpt_dds_extn_stage_load.ksh ${AI_SERIAL}/${AB_JOB}_dds_parm_extn_iri_ctc_rpt.dat _${DestType} ${CURR_TIME_STAMP} $PRIVATE_SCRIPT/1_ctc_rpt_dds_extn_stage_to_base.ksh ${AI_SERIAL}/${AB_JOB}_ ${DestType} ${CURR_TIME_STAMP} 

Variable 3:

 TGDM01.T3113_DA_DLVR_SP a, TGIDM01.T3121_RT_REQ_CHK b TGIM01.T3121_RPT_RQ_CHK 

J'ai besoin d'imprimer / exporter la variable 1,2,3 côte à côte colonne sage dans une feuille de Microsoft Excel.

Le plus simple pour générer un file compris par Microsoft Excel est d'utiliser un format CSV car c'est juste du text avec un format simple. Dans le format standard , les lignes sont délimitées par une nouvelle ligne, les cellules sont séparées par des virgules, des guillemets sont utilisés pour citer les champs qui contiennent des caractères problématiques comme virgule et nouvelle ligne et un caractère double.

Une chose que le format de file CSV ne spécifie pas est le jeu de caractères utilisé dans le text du file. Cela doit être communiqué par d'autres moyens.

Contenu variable en tant que cellule unique

Pour sortir une ligne CSV avec ces 3 variables, tout ce que nous avons à faire est:

  • échapper aux " caractères dans les variables
  • enveloppez cela entre guillemets
  • joignez-les avec des virgules
  • ajoutez un caractère de nouvelle ligne.

Le printf embedded au shell ksh93 , en tant que le format %#q pour sortir une string en tant que champ CSV, prend donc soin des deux premiers points ci-dessus pour les valeurs qui doivent être citées. Donc, dans cette coquille, c'est juste:

  printf '%#q,%#q,%#q\n' "$var1" "$var2" "$var3" 

Avec bash / zsh / ksh , vous pouvez faire cet enencoding à la main et citer chaque cellule avec:

  printf '"%s","%s","%s"\n' "${var1//\"/\"\"}" "${var2//\"/\"\"}" "${var3//\"/\"\"}" 

POSIXly, vous pourriez utiliser awk pour faire l'enencoding:

 awk ' BEGIN { for(i = 1; i < ARGC; i++) { gsub(/"/, "\"\"", ARGV[i]) printf "%s\"%s\"", sep, ARGV[i] sep = "," } printf "\n" }' "$var1" "$var2" "$var3" > file.csv 

Sur votre consortingbution, tous ceux qui donnent:

 "'file:'""$AI_SERIAL_LOOKUP""'/GDFS_Off_Peak_Lkp.txt' 'file:'""$AI_SERIAL_LOOKUP""'/mssu2_massched.mssulrm_lkup_'""$AI_PHASE""'.txt' 'file:'""${AI_SERIAL_TEMP}""","$PRIVATE_SCRIPT/2_ctc_rpt_dds_extn_stage_load.ksh ${AI_SERIAL}/${AB_JOB}_dds_parm_extn_iri_ctc_rpt.dat _${DestType} ${CURR_TIME_STAMP} $PRIVATE_SCRIPT/1_ctc_rpt_dds_extn_stage_to_base.ksh ${AI_SERIAL}/${AB_JOB}_ ${DestType} ${CURR_TIME_STAMP}","TGDM01.T3113_DA_DLVR_SP a, TGIDM01.T3121_RT_REQ_CHK b TGIM01.T3121_RPT_RQ_CHK" 

Chaque ligne de chaque variable en tant que cellule de feuille de calcul

Cela devient plus compliqué car vous devez également split les variables dans ses lignes.

Avec ksh93 et son format %#q :

 IFS= while found=false read -ru3 a && found=true read -ru4 b && found=true read -ru5 c || "$found" do printf '%#q,%#q,%#q\n' "$a" "$b" "$c" done 3<<< "$var1" 4<<< "$var2" 5<<< "$var3" > file.csv 

Avec bash / zsh / ksh , vous pouvez aussi utiliser paste pour coller 3 stream constitués de l'expansion des variables où les " ont été échappés:

 paste -d '"",' - <(printf '%s\n' "${var1//\"/\"\"}") - \ - <(printf '%s\n' "${var2//\"/\"\"}") - \ - <(printf '%s\n' "${var3//\"/\"\"}") - < /dev/null > file.csv 

qui sur votre input donnerait:

 "'file:'""$AI_SERIAL_LOOKUP""'/GDFS_Off_Peak_Lkp.txt'","$PRIVATE_SCRIPT/2_ctc_rpt_dds_extn_stage_load.ksh ${AI_SERIAL}/${AB_JOB}_dds_parm_extn_iri_ctc_rpt.dat _${DestType} ${CURR_TIME_STAMP}","TGDM01.T3113_DA_DLVR_SP a," "'file:'""$AI_SERIAL_LOOKUP""'/mssu2_massched.mssulrm_lkup_'""$AI_PHASE""'.txt'","$PRIVATE_SCRIPT/1_ctc_rpt_dds_extn_stage_to_base.ksh ${AI_SERIAL}/${AB_JOB}_ ${DestType} ${CURR_TIME_STAMP}","TGIDM01.T3121_RT_REQ_CHK b" "'file:'""${AI_SERIAL_TEMP}""","","TGIM01.T3121_RPT_RQ_CHK"