Shell脚本使用awk给文本文件添加表头不生效如何解决
问题排查及修复方案
错误原因
awk命令未指定输入源:awk默认从标准输入读取内容,当前写法没有传递任何输入文件给awk,命令会一直阻塞等待输入,不会输出表头内容到目标文件。- 仅配置了SP类输出文件的表头插入逻辑,剩余SS、SG、GS三类输出文件无对应表头插入代码。
- 纯输出固定表头无需调用awk,使用
echo命令更简洁高效。
修复后代码
start_MERGE_JobRec() { FindBatchNumber export TEMP_SP_FORMAT="Temp_${file_indicator}_SP_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_INSTANCE[0-9][0-9].txt" export TEMP_SS_FORMAT="Temp_${file_indicator}_SS_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_INSTANCE[0-9][0-9].txt" export TEMP_SG_FORMAT="Temp_${file_indicator}_SG_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_INSTANCE[0-9][0-9].txt" export TEMP_GS_FORMAT="Temp_${file_indicator}_GS_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_INSTANCE[0-9][0-9].txt" export SP_OUTPUT_FILE="RTBCON_${file_indicator}_SP_${ONLINE_DATE}${TIME}_${BATCH_NUMBER}.txt" export SS_OUTPUT_FILE="RTBCON_${file_indicator}_SS_${ONLINE_DATE}${TIME}_${BATCH_NUMBER}.txt" export SG_OUTPUT_FILE="RTBCON_${file_indicator}_SG_${ONLINE_DATE}${TIME}_${BATCH_NUMBER}.txt" export GS_OUTPUT_FILE="RTBCON_${file_indicator}_GS_${ONLINE_DATE}${TIME}_${BATCH_NUMBER}.txt" #--------------------------------------------------- # Add header at the start for each file #--------------------------------------------------- # 定义表头变量,避免重复写相同字符串 HEADER="recordType|lifetimeId|MSISDN|status|effectiveDate|expiryDate|oldMSISDN|accountType|billingAccountNumber|usageTypeBen|IMEI|IMSI|cycleCode|cycleMonth|firstBillExperience|recordStatus|failureReason" # 先写入表头到各输出文件,用>覆盖新建避免旧内容干扰 echo "$HEADER" > "$SP_OUTPUT_FILE" echo "$HEADER" > "$SS_OUTPUT_FILE" echo "$HEADER" > "$SG_OUTPUT_FILE" echo "$HEADER" > "$GS_OUTPUT_FILE" # 再追加临时文件内容到对应输出文件 find . -maxdepth 1 -type f -name "${TEMP_SP_FORMAT}" -exec cat {} + >> "$SP_OUTPUT_FILE" find . -maxdepth 1 -type f -name "${TEMP_SS_FORMAT}" -exec cat {} + >> "$SS_OUTPUT_FILE" find . -maxdepth 1 -type f -name "${TEMP_SG_FORMAT}" -exec cat {} + >> "$SG_OUTPUT_FILE" find . -maxdepth 1 -type f -name "${TEMP_GS_FORMAT}" -exec cat {} + >> "$GS_OUTPUT_FILE" }
额外优化说明
- 新增了表头变量,后续修改表头只需要改一处即可
- 给变量引用加了双引号,避免路径/文件名包含空格时执行出错
- 写入表头时使用
>覆盖模式,保证如果目标文件已存在时,表头始终在文件第一行
内容的提问来源于stack exchange,提问作者Bhushan Patil
相关产品推荐
相关产品推荐

