You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unix脚本中printf生成HDR记录时莫名多出两个空格的问题求助

排查Unix脚本printf输出多余空格问题

问题现象

在Unix脚本中使用printf生成HDR记录时,输出行中多出两个空格,不符合预期格式。

脚本代码

REC_TYP="1"
SYS_ID="AN"    #CR119
SYS_FILE_NBR="03"
DT_STAMP=`date +%Y%m%d`
DT_STAMP=$(echo "$DT_STAMP" | tr -s " ")
TI_STAMP=`date +%T`
TI_STAMP1=$(echo "$TI_STAMP" | sed 's/://g')
FILE_TXT="abc_FILE"
echo "Date value:"$DT_STAMP
echo "Timestamp:"$TI_STAMP1
printf '%s%1s%2s%2s%8s%6s\n' $REC_TYP $SYS_ID $SYS_FILE_NBR $DT_STAMP $TI_STAMP1 #$FILE_TXT

输出对比

  • 期望输出:
1AN0320230822024946abc_FILE
  • 实际输出:
1AN0320230822  024946abc_FILE

问题原因

多余空格来自printf格式串中的%8s占位符:

  • 该占位符对应参数TI_STAMP1,而TI_STAMP1是固定6位的字符串(如024946);
  • %8s表示输出字符串的宽度强制为8位,当实际字符串长度不足8位时,会自动在左侧补空格填充,因此6位的TI_STAMP1会被补2个空格,导致输出出现多余空格。
  • 另外,原格式串定义了6个占位符,但仅传入5个参数,若要包含$FILE_TXT字段,需取消注释并确保占位符与参数数量匹配。

解决方法

  1. 调整格式串,将%8s改为%s(或匹配TI_STAMP1长度的%6s),直接输出参数实际内容,避免自动补空格:

    printf '%s%s%s%s%s%s\n' $REC_TYP $SYS_ID $SYS_FILE_NBR $DT_STAMP $TI_STAMP1 $FILE_TXT
    

    (注:若所有参数都是固定长度,直接用%s即可拼接出无多余空格的结果;若需严格控制字段宽度,确保占位符宽度与对应参数的实际长度一致)

  2. 取消$FILE_TXT的注释,让占位符数量与传入参数数量完全匹配,保证输出包含目标字段。

内容的提问来源于stack exchange,提问作者Pandia Shanmugam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:32:40