Variável de eco em coluna

3

Variável 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}"

Variável 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}

Variável 3:

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

Eu preciso imprimir / exportar a variável 1,2,3 lado a lado em uma planilha do Microsoft Excel.

    
por Gaurav Chavan 15.11.2016 / 10:30

1 resposta

6

O mais fácil de gerar um arquivo compreendido pelo Microsoft Excel é usar um formato CSV, pois é apenas um texto com um formato simples. No formato padrão , as linhas são delimitadas por nova linha, as células são separadas por vírgula, com aspas duplas sendo usadas para citar os campos que contém caracteres problemáticos, como vírgula e nova linha, e onde um caractere duplo é inserido como "" .

Uma coisa que o formato de arquivo CSV não especifica é o conjunto de caracteres que está sendo usado no texto do arquivo. Isso tem que ser comunicado por outros meios.

Conteúdo variável como célula única

Para gerar uma linha CSV com essas três variáveis, tudo o que precisamos fazer é:

  • escape dos caracteres " dentro das variáveis
  • envolva isso entre aspas duplas
  • junte-se a eles com vírgulas
  • adicione um caractere de nova linha.

O printf incorporado ao shell ksh93 , como o formato %#q para gerar uma string como um campo CSV, cuida dos dois primeiros pontos acima para os valores que precisam ser citados. Então, nesse shell, é só:

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

Com bash / zsh / ksh , você pode fazer essa codificação manualmente e citar cada célula com:

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

POSIXly, você poderia usar awk para fazer a codificação:

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

Em sua opinião, todos dão:

"'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"

Cada linha de cada variável como uma célula de planilha

Isso fica mais complicado, pois você também precisa dividir as variáveis em suas linhas.

Com ksh93 e seu formato %#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

Com bash / zsh / ksh , você também pode usar o colar para colar 3 fluxos consistindo na expansão das variáveis em que o " foi ignorado:

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

que na sua entrada daria:

"'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"
    
por 15.11.2016 / 10:48

Tags