按列回显变量

按列回显变量

变量 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}"

变量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}

变量 3:

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

我需要在 Microsoft Excel 工作表中按列并排打印/导出变量 1,2,3。

答案1

生成 Microsoft Excel 可以理解的文件的最简单方法是使用 CSV 格式,因为它只是格式简单的文本。在里面标准格式,行以换行符分隔,单元格以逗号分隔,双引号用于引用包含有问题的字符(如逗号和换行符)的字段,并且双字符本身作为"".

CSV 文件格式未指定的一件事是文件文本中使用的字符集。这必须通过其他方式进行传达。

单细胞可变内容

要输出包含这 3 个变量的 CSV 行,我们需要做的就是:

  • "对变量中的字符进行转义
  • 将其用双引号括起来
  • 用逗号连接
  • 添加换行符。

printfshell的内置函数作为ksh93%#q字符串输出为 CSV 字段的格式,因此针对需要引用的值处理上面的前两点。所以在那个 shell 中,它只是:

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

使用bash/ zsh/ ksh,您可以手动进行编码并用以下内容引用每个单元格:

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

POSIXly,您可以使用awk以下方法进行编码:

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

根据您的输入,所有这些都会给出:

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

每个变量的每一行作为电子表格单元格

这变得更加复杂,因为您还需要将变量分成几行。

及其ksh93格式%#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

使用bash// zshksh您还可以使用 Paste 来粘贴 3 个流,其中包含已转义的变量的扩展"

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

根据您的输入将给出:

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

相关内容