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字段,需取消注释并确保占位符与参数数量匹配。
解决方法
调整格式串,将
%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即可拼接出无多余空格的结果;若需严格控制字段宽度,确保占位符宽度与对应参数的实际长度一致)取消
$FILE_TXT的注释,让占位符数量与传入参数数量完全匹配,保证输出包含目标字段。
内容的提问来源于stack exchange,提问作者Pandia Shanmugam
相关产品推荐
相关产品推荐

