变量 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 行,我们需要做的就是:
"
对变量中的字符进行转义- 将其用双引号括起来
- 用逗号连接
- 添加换行符。
printf
shell的内置函数作为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
// zsh
,ksh
您还可以使用 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"