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

日志提取缺失文件日期脚本报Bad substitution错误求助

问题解决与实现方案

错误原因分析

你遇到的Bad substitution错误,是因为脚本里的${echo $(awk '{if($1 -eq "gawk")print $4}' datafile.txt):-14,8}完全不符合Bash语法规则:

  1. Bash的参数替换${...}内部不能直接嵌套echo命令;
  2. 你想实现的字符串切片语法写错了,正确的切片格式是${变量名:起始位置:长度},但直接处理多行命令输出时,用Bash切片会非常繁琐,不如直接用Awk完成文本提取更高效;
  3. 原Awk命令里的$1 -eq "gawk"用了数值比较符-eq,字符串比较应该用==。

正确实现脚本

直接用Awk一步完成日志分析与日期提取,无需复杂的Bash字符串处理,完整脚本如下:

#!/bin/bash
# 提取缺失文件对应的日期并输出到outfile.txt
awk '/gawk:/ {
    # 匹配行中的8位数字日期
    match($0, /[0-9]{8}/)
    print substr($0, RSTART, RLENGTH)
}' datafile.txt > outfile.txt

脚本说明

  1. /gawk:/:只处理包含gawk:的错误行(即记录文件缺失的行);
  2. match($0, /[0-9]{8}/):在当前行中匹配8位数字的日期串;
  3. substr($0, RSTART, RLENGTH):提取匹配到的8位日期并打印;
  4. 最后将结果重定向到outfile.txt,符合你的期望输出格式。

执行该脚本后,outfile.txt内容将完全符合需求:

20091013
20091015
20091016
20091018

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:32:34