#20

ACM ICPC 2014-2015, Northeastern European Regional Contest

A
最优策略变偶数序号的行列

http://paste.ubuntu.com/25368920/

B
贪心
注意bi为0的情况

http://paste.ubuntu.com/25369042/

C
D

E
先对他原始的状态建立一个自动机
然后枚举起始点2-n
假如下一个状态未定义就拷贝一个副本连上

http://paste.ubuntu.com/25371044/

F
模拟
hash的位置如果都为1则加入答案

http://paste.ubuntu.com/25369044/

G
H

I
用一个序列代表每个坐标的序号
那么合法的一定是这一段上的一个递增序列连着一个递减序列
挑最长的改变剩下的就是最优策略
于是问题变成求最长上升子序列和最长递减子序列

http://paste.ubuntu.com/25369626/

J
搜索+剪枝

http://paste.ubuntu.com/25369062/

K
暴力

http://paste.ubuntu.com/25369065/

#!/bin/bash # 定义目标目录 base_dir="/home/trade/product_env/backup" output_file="${base_dir}/fout.txt" # 确保输出目录存在 mkdir -p "$(dirname "$output_file")" # 清空或创建输出文件 > "$output_file" # 动态计算日期范围:从指定日期到上个月的第一天 get_date_range() { local current_date="$1" local day=$(date -d "$current_date" +%d) local last_month_first_day # 显式将 day 转换为十进制 last_month_first_day=$(date -d "$current_date -$(($10#$day - 1)) days -1 month" +"%Y%m%d") echo "$current_date $last_month_first_day" } # 将 out.sh 的功能封装为函数 generate_output() { local log_path="$1" local output_file="$2" cd "$log_path" || return # 创建一个临时文件,用于保存经过处理后的唯一行 temp_file=$(mktemp) # 提取目录名作为当前日期(假设目录名格式为 YYYYMMDD) current_date=$(basename "$(dirname "$(dirname "$log_path")")") # 获取动态日期范围 read -r start_date end_date <<< "$(get_date_range "$current_date")" # 查找指定日期范围内的Log.txt文件 find . -name "*$start_date*Log.txt" -o -name "*$end_date*Log.txt" | while IFS= read -r file; do # 在文件中查找特定字段,并处理数据 grep -E "172.22.88.*result=okay:user=" "$file" | cut -d&#39;:&#39; -f6,8,9 | sort | uniq >> "$temp_file" done # 将临时文件内容写入输出文件 cat "$temp_file" > out.txt rm "$temp_file" # 合并并去重输出 sort out.txt | uniq >> "$output_file" rm "out.txt" } # 查找符合每月一号格式的目录(如 20250401) for dir in $(find "$base_dir" -mindepth 1 -maxdepth 1 -type d -name "[0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9]" | sort); do # 遍历 day 和 night 目录 for sub_dir in day night; do log_path="${dir}/${sub_dir}/log" if [ -d "$log_path" ]; then # 调用封装好的函数替代 out.sh generate_output "$log_path" "$output_file" fi done done # 最终去重和排序 sort -u "$output_file" -o "$output_file"./output.sh: line 20: 202503100#10: invalid arithmetic base (error token is "202503100#10") ./output.sh: line 20: 202503110#11: invalid arithmetic base (error token is "202503110#11") ./output.sh: line 20: 202503110#11: invalid arithmetic base (error token is "202503110#11") ./output.sh: line 20: 202503120#12: invalid arithmetic base (error token is "202503120#12") ./output.sh: line 20: 202503120#12: invalid arithmetic base (error token is "202503120#12") ./output.sh: line 20: 202503130#13: invalid arithmetic base (error token is "202503130#13") ./output.sh: line 20: 202503130#13: invalid arithmetic base (error token is "202503130#13") ./output.sh: line 20: 202503140#14: invalid arithmetic base (error token is "202503140#14") ./output.sh: line 20: 202503140#14: invalid arithmetic base (error token is "202503140#14") ./output.sh: line 20: 202503170#17: invalid arithmetic base (error token is "202503170#17") ./output.sh: line 20: 202503170#17: invalid arithmetic base (error token is "202503170#17") ./output.sh: line 20: 202503180#18: invalid arithmetic base (error token is "202503180#18") ./output.sh: line 20: 202503180#18: invalid arithmetic base (error token is "202503180#18") ./output.sh: line 20: 202503190#19: invalid arithmetic base (error token is "202503190#19") ./output.sh: line 20: 202503190#19: invalid arithmetic base (error token is "202503190#19") ./output.sh: line 20: 202503200#20: invalid arithmetic base (error token is "202503200#20") ./output.sh: line 20: 202503200#20: invalid arithmetic base (error token is "202503200#20") ./output.sh: line 20: 202503210#21: invalid arithmetic base (error token is "202503210#21") ./output.sh: line 20: 202503210#21: invalid arithmetic base (error token is "202503210#21") ./output.sh: line 20: 202503240#24: invalid arithmetic base (error token is "202503240#24") ./output.sh: line 20: 202503240#24: invalid arithmetic base (error token is "202503240#24") ./output.sh: line 20: 202503250#25: invalid arithmetic base (error token is "202503250#25") ./output.sh: line 20: 202503250#25: invalid arithmetic base (error token is "202503250#25") ./output.sh: line 20: 202503260#26: invalid arithmetic base (error token is "202503260#26") ./output.sh: line 20: 202503260#26: invalid arithmetic base (error token is "202503260#26") ./output.sh: line 20: 202503270#27: invalid arithmetic base (error token is "202503270#27") ./output.sh: line 20: 202503270#27: invalid arithmetic base (error token is "202503270#27") ./output.sh: line 20: 202503280#28: invalid arithmetic base (error token is "202503280#28") ./output.sh: line 20: 202503280#28: invalid arithmetic base (error token is "202503280#28") ./output.sh: line 20: 202503310#31: invalid arithmetic base (error token is "202503310#31") ./output.sh: line 20: 202503310#31: invalid arithmetic base (error token is "202503310#31") ./output.sh: line 20: 202504010#01: invalid arithmetic base (error token is "202504010#01") ./output.sh: line 20: 202504010#01: invalid arithmetic base (error token is "202504010#01") ./output.sh: line 20: 202504020#02: invalid arithmetic base (error token is "202504020#02") ./output.sh: line 20: 202504020#02: invalid arithmetic base (error token is "202504020#02") ./output.sh: line 20: 202504030#03: invalid arithmetic base (error token is "202504030#03") ./output.sh: line 20: 202504030#03: invalid arithmetic base (error token is "202504030#03") ./output.sh: line 20: 202504070#07: invalid arithmetic base (error token is "202504070#07") ./output.sh: line 20: 202504080#08: invalid arithmetic base (error token is "202504080#08") ./output.sh: line 20: 202504080#08: invalid arithmetic base (error token is "202504080#08") ./output.sh: line 20: 202504090#09: invalid arithmetic base (error token is "202504090#09") ./output.sh: line 20: 202504090#09: invalid arithmetic base (error token is "202504090#09") ./output.sh: line 20: 202504100#10: invalid arithmetic base (error token is "202504100#10") ./output.sh: line 20: 202504100#10: invalid arithmetic base (error token is "202504100#10") ./output.sh: line 20: 202504110#11: invalid arithmetic base (error token is "202504110#11") ./output.sh: line 20: 202504110#11: invalid arithmetic base (error token is "202504110#11") ./output.sh: line 20: 202504140#14: invalid arithmetic base (error token is "202504140#14") ./output.sh: line 20: 202504140#14: invalid arithmetic base (error token is "202504140#14") ./output.sh: line 20: 202504150#15: invalid arithmetic base (error token is "202504150#15") ./output.sh: line 20: 202504150#15: invalid arithmetic base (error token is "202504150#15") ./output.sh: line 20: 202504160#16: invalid arithmetic base (error token is "202504160#16") ./output.sh: line 20: 202504160#16: invalid arithmetic base (error token is "202504160#16") ./output.sh: line 20: 202504170#17: invalid arithmetic base (error token is "202504170#17") ./output.sh: line 20: 202504170#17: invalid arithmetic base (error token is "202504170#17") ./output.sh: line 20: 202504180#18: invalid arithmetic base (error token is "202504180#18") ./output.sh: line 20: 202504180#18: invalid arithmetic base (error token is "202504180#18") ./output.sh: line 20: 202504210#21: invalid arithmetic base (error token is "202504210#21") ./output.sh: line 20: 202504210#21: invalid arithmetic base (error token is "202504210#21") ./output.sh: line 20: 202504220#22: invalid arithmetic base (error token is "202504220#22") ./output.sh: line 20: 202504220#22: invalid arithmetic base (error token is "202504220#22") ./output.sh: line 20: 202504230#23: invalid arithmetic base (error token is "202504230#23") ./output.sh: line 20: 202504230#23: invalid arithmetic base (error token is "202504230#23") ./output.sh: line 20: 202504240#24: invalid arithmetic base (error token is "202504240#24") ./output.sh: line 20: 202504240#24: invalid arithmetic base (error token is "202504240#24") ./output.sh: line 20: 202504250#25: invalid arithmetic base (error token is "202504250#25") ./output.sh: line 20: 202504250#25: invalid arithmetic base (error token is "202504250#25") ./output.sh: line 20: 202504280#28: invalid arithmetic base (error token is "202504280#28") ./output.sh: line 20: 202504280#28: invalid arithmetic base (error token is "202504280#28") ./output.sh: line 20: 202504290#29: invalid arithmetic base (error token is "202504290#29") ./output.sh: line 20: 202504290#29: invalid arithmetic base (error token is "202504290#29") ./output.sh: line 20: 202504300#30: invalid arithmetic base (error token is "202504300#30") ./output.sh: line 20: 202504300#30: invalid arithmetic base (error token is "202504300#30") ./output.sh: line 20: 202505060#06: invalid arithmetic base (error token is "202505060#06") ./output.sh: line 20: 202505070#07: invalid arithmetic base (error token is "202505070#07") ./output.sh: line 20: 202505070#07: invalid arithmetic base (error token is "202505070#07") ./output.sh: line 20: 202505080#08: invalid arithmetic base (error token is "202505080#08") ./output.sh: line 20: 202505080#08: invalid arithmetic base (error token is "202505080#08") ./output.sh: line 20: 202505090#09: invalid arithmetic base (error token is "202505090#09") ./output.sh: line 20: 202505090#09: invalid arithmetic base (error token is "202505090#09") ./output.sh: line 20: 202505120#12: invalid arithmetic base (error token is "202505120#12") ./output.sh: line 20: 202505120#12: invalid arithmetic base (error token is "202505120#12") ./output.sh: line 20: 202505130#13: invalid arithmetic base (error token is "202505130#13") ./output.sh: line 20: 202505130#13: invalid arithmetic base (error token is "202505130#13") ./output.sh: line 20: 202505140#14: invalid arithmetic base (error token is "202505140#14") ./output.sh: line 20: 202505140#14: invalid arithmetic base (error token is "202505140#14") ./output.sh: line 20: 202505150#15: invalid arithmetic base (error token is "202505150#15") ./output.sh: line 20: 202505150#15: invalid arithmetic base (error token is "202505150#15") ./output.sh: line 20: 202505160#16: invalid arithmetic base (error token is "202505160#16") ./output.sh: line 20: 202505160#16: invalid arithmetic base (error token is "202505160#16") ./output.sh: line 20: 202505190#19: invalid arithmetic base (error token is "202505190#19") ./output.sh: line 20: 202505190#19: invalid arithmetic base (error token is "202505190#19") ./output.sh: line 20: 202505200#20: invalid arithmetic base (error token is "202505200#20") ./output.sh: line 20: 202505200#20: invalid arithmetic base (error token is "202505200#20") ./output.sh: line 20: 202505210#21: invalid arithmetic base (error token is "202505210#21") ./output.sh: line 20: 202505210#21: invalid arithmetic base (error token is "202505210#21") ./output.sh: line 20: 202505220#22: invalid arithmetic base (error token is "202505220#22") ./output.sh: line 20: 202505220#22: invalid arithmetic base (error token is "202505220#22") ./output.sh: line 20: 202505230#23: invalid arithmetic base (error token is "202505230#23") ./output.sh: line 20: 202505230#23: invalid arithmetic base (error token is "202505230#23") ./output.sh: line 20: 202505260#26: invalid arithmetic base (error token is "202505260#26") ./output.sh: line 20: 202505260#26: invalid arithmetic base (error token is "202505260#26") ./output.sh: line 20: 202505270#27: invalid arithmetic base (error token is "202505270#27") ./output.sh: line 20: 202505270#27: invalid arithmetic base (error token is "202505270#27") ./output.sh: line 20: 202505280#28: invalid arithmetic base (error token is "202505280#28") ./output.sh: line 20: 202505280#28: invalid arithmetic base (error token is "202505280#28") ./output.sh: line 20: 202505290#29: invalid arithmetic base (error token is "202505290#29") ./output.sh: line 20: 202505290#29: invalid arithmetic base (error token is "202505290#29") ./output.sh: line 20: 202505300#30: invalid arithmetic base (error token is "202505300#30") ./output.sh: line 20: 202505300#30: invalid arithmetic base (error token is "202505300#30") ./output.sh: line 20: 202506030#03: invalid arithmetic base (error token is "202506030#03") ./output.sh: line 20: 202506040#04: invalid arithmetic base (error token is "202506040#04") ./output.sh: line 20: 202506040#04: invalid arithmetic base (error token is "202506040#04") ./output.sh: line 20: 202506050#05: invalid arithmetic base (error token is "202506050#05") ./output.sh: line 20: 202506050#05: invalid arithmetic base (error token is "202506050#05") ./output.sh: line 20: 202506060#06: invalid arithmetic base (error token is "202506060#06") ./output.sh: line 20: 202506060#06: invalid arithmetic base (error token is "202506060#06") ./output.sh: line 20: 202506090#09: invalid arithmetic base (error token is "202506090#09") ./output.sh: line 20: 202506090#09: invalid arithmetic base (error token is "202506090#09") ./output.sh: line 20: 202506100#10: invalid arithmetic base (error token is "202506100#10") ./output.sh: line 20: 202506100#10: invalid arithmetic base (error token is "202506100#10") ./output.sh: line 20: 202506110#11: invalid arithmetic base (error token is "202506110#11") ./output.sh: line 20: 202506110#11: invalid arithmetic base (error token is "202506110#11") ./output.sh: line 20: 202506120#12: invalid arithmetic base (error token is "202506120#12") ./output.sh: line 20: 202506120#12: invalid arithmetic base (error token is "202506120#12") ./output.sh: line 20: 202506130#13: invalid arithmetic base (error token is "202506130#13") ./output.sh: line 20: 202506130#13: invalid arithmetic base (error token is "202506130#13") ./output.sh: line 20: 202506160#16: invalid arithmetic base (error token is "202506160#16") ./output.sh: line 20: 202506160#16: invalid arithmetic base (error token is "202506160#16") ./output.sh: line 20: 202506170#17: invalid arithmetic base (error token is "202506170#17") ./output.sh: line 20: 202506170#17: invalid arithmetic base (error token is "202506170#17") ./output.sh: line 20: 202506180#18: invalid arithmetic base (error token is "202506180#18") ./output.sh: line 20: 202506180#18: invalid arithmetic base (error token is "202506180#18") ./output.sh: line 20: 202506190#19: invalid arithmetic base (error token is "202506190#19") ./output.sh: line 20: 202506190#19: invalid arithmetic base (error token is "202506190#19") ./output.sh: line 20: 202506200#20: invalid arithmetic base (error token is "202506200#20") ./output.sh: line 20: 202506200#20: invalid arithmetic base (error token is "202506200#20") ./output.sh: line 20: 202506230#23: invalid arithmetic base (error token is "202506230#23") ./output.sh: line 20: 202506230#23: invalid arithmetic base (error token is "202506230#23") ./output.sh: line 20: 202506240#24: invalid arithmetic base (error token is "202506240#24") ./output.sh: line 20: 202506240#24: invalid arithmetic base (error token is "202506240#24") ./output.sh: line 20: 202506250#25: invalid arithmetic base (error token is "202506250#25") ./output.sh: line 20: 202506250#25: invalid arithmetic base (error token is "202506250#25") ./output.sh: line 20: 202506260#26: invalid arithmetic base (error token is "202506260#26") ./output.sh: line 20: 202506260#26: invalid arithmetic base (error token is "202506260#26") ./output.sh: line 20: 202506270#27: invalid arithmetic base (error token is "202506270#27") ./output.sh: line 20: 202506270#27: invalid arithmetic base (error token is "202506270#27") ./output.sh: line 20: 202506300#30: invalid arithmetic base (error token is "202506300#30") ./output.sh: line 20: 202506300#30: invalid arithmetic base (error token is "202506300#30") ./output.sh: line 20: 202507010#01: invalid arithmetic base (error token is "202507010#01") ./output.sh: line 20: 202507010#01: invalid arithmetic base (error token is "202507010#01") ./output.sh: line 20: 202507020#02: invalid arithmetic base (error token is "202507020#02") ./output.sh: line 20: 202507020#02: invalid arithmetic base (error token is "202507020#02") ./output.sh: line 20: 202507030#03: invalid arithmetic base (error token is "202507030#03") ./output.sh: line 20: 202507030#03: invalid arithmetic base (error token is "202507030#03") ./output.sh: line 20: 202507040#04: invalid arithmetic base (error token is "202507040#04") ./output.sh: line 20: 202507040#04: invalid arithmetic base (error token is "202507040#04") ./output.sh: line 20: 202507070#07: invalid arithmetic base (error token is "202507070#07") ./output.sh: line 20: 202507070#07: invalid arithmetic base (error token is "202507070#07") ./output.sh: line 20: 202507080#08: invalid arithmetic base (error token is "202507080#08") ./output.sh: line 20: 202507080#08: invalid arithmetic base (error token is "202507080#08") ./output.sh: line 20: 202507090#09: invalid arithmetic base (error token is "202507090#09") ./output.sh: line 20: 202507090#09: invalid arithmetic base (error token is "202507090#09") ./output.sh: line 20: 202507100#10: invalid arithmetic base (error token is "202507100#10") ./output.sh: line 20: 202507100#10: invalid arithmetic base (error token is "202507100#10") ./output.sh: line 20: 202507110#11: invalid arithmetic base (error token is "202507110#11") ./output.sh: line 20: 202507110#11: invalid arithmetic base (error token is "202507110#11") ./output.sh: line 20: 202507140#14: invalid arithmetic base (error token is "202507140#14") ./output.sh: line 20: 202507140#14: invalid arithmetic base (error token is "202507140#14") ./output.sh: line 20: 202507150#15: invalid arithmetic base (error token is "202507150#15") ./output.sh: line 20: 202507150#15: invalid arithmetic base (error token is "202507150#15") ./output.sh: line 20: 202507160#16: invalid arithmetic base (error token is "202507160#16") ./output.sh: line 20: 202507160#16: invalid arithmetic base (error token is "202507160#16") ./output.sh: line 20: 202507170#17: invalid arithmetic base (error token is "202507170#17") ./output.sh: line 20: 202507170#17: invalid arithmetic base (error token is "202507170#17") ./output.sh: line 20: 202507180#18: invalid arithmetic base (error token is "202507180#18") ./output.sh: line 20: 202507180#18: invalid arithmetic base (error token is "202507180#18") ./output.sh: line 20: 202507210#21: invalid arithmetic base (error token is "202507210#21") ./output.sh: line 20: 202507210#21: invalid arithmetic base (error token is "202507210#21") ./output.sh: line 20: 202507220#22: invalid arithmetic base (error token is "202507220#22") ./output.sh: line 20: 202507220#22: invalid arithmetic base (error token is "202507220#22") ./output.sh: line 20: 202507230#23: invalid arithmetic base (error token is "202507230#23") ./output.sh: line 20: 202507230#23: invalid arithmetic base (error token is "202507230#23") ./output.sh: line 20: 202507240#24: invalid arithmetic base (error token is "202507240#24") ./output.sh: line 20: 202507240#24: invalid arithmetic base (error token is "202507240#24") ./output.sh: line 20: 202507250#25: invalid arithmetic base (error token is "202507250#25") ./output.sh: line 20: 202507250#25: invalid arithmetic base (error token is "202507250#25") ./output.sh: line 20: 202507280#28: invalid arithmetic base (error token is "202507280#28") ./output.sh: line 20: 202507280#28: invalid arithmetic base (error token is "202507280#28") ./output.sh: line 20: 202507290#29: invalid arithmetic base (error token is "202507290#29") ./output.sh: line 20: 202507290#29: invalid arithmetic base (error token is "202507290#29") ./output.sh: line 20: 202507300#30: invalid arithmetic base (error token is "202507300#30") ./output.sh: line 20: 202507300#30: invalid arithmetic base (error token is "202507300#30") ./output.sh: line 20: 202507310#31: invalid arithmetic base (error token is "202507310#31") ./output.sh: line 20: 202507310#31: invalid arithmetic base (error token is "202507310#31") ./output.sh: line 20: 202508010#01: invalid arithmetic base (error token is "202508010#01") ./output.sh: line 20: 202508010#01: invalid arithmetic base (error token is "202508010#01") ./output.sh: line 20: 202508040#04: invalid arithmetic base (error token is "202508040#04") ./output.sh: line 20: 202508040#04: invalid arithmetic base (error token is "202508040#04") ./output.sh: line 20: 202508050#05: invalid arithmetic base (error token is "202508050#05") ./output.sh: line 20: 202508050#05: invalid arithmetic base (error token is "202508050#05") ./output.sh: line 20: 202508060#06: invalid arithmetic base (error token is "202508060#06") ./output.sh: line 20: 202508060#06: invalid arithmetic base (error token is "202508060#06") ./output.sh: line 20: 202508070#07: invalid arithmetic base (error token is "202508070#07") ./output.sh: line 20: 202508070#07: invalid arithmetic base (error token is "202508070#07") ./output.sh: line 20: 202508080#08: invalid arithmetic base (error token is "202508080#08") ./output.sh: line 20: 202508080#08: invalid arithmetic base (error token is "202508080#08")输出完整代码 echo "操作已完成,结果已汇总至 ${output_file}"这么修改这段这段代码不会输出
最新发布
08-10
<think>我们遇到的问题是在进行算术运算时,由于日期中的天数(day)可能带有前导零(如08、09),而Bash会将带有前导零的数字解释为八进制数,导致当数字中包含8或9时出现“invalid arithmetic base”错误。 解决方案是在算术运算中显式指定基数为10,使用`10#`前缀。例如,将`$(($day - 1))`改为`$((10#$day - 1))`。 但是,在`get_date_range`函数中,我们有一行: last_month_first_day=$(date -d "$current_date -$(($10#$day - 1)) days -1 month" +"%Y%m%d") 这里,我们尝试使用`10#$day`来将`$day`转换为十进制数。然而,在算术展开中,`$10#$day`的写法是错误的,因为`10#$day`是一个整体,表示以10为基数解释`day`变量。但是,在算术表达式中,我们不能在变量名前加`$`同时又使用基数表示法。正确的写法是去掉变量前的`$`,直接使用变量名,并在前面加上`10#`,即`10#$day`应该写为`10#day`,但注意,在算术展开中,变量名不需要加`$`。然而,这里我们是在一个字符串中构建`date`命令的参数,所以我们需要在算术展开中计算表达式。 实际上,我们应该这样写: days_to_subtract=$((10#$day - 1)) last_month_first_day=$(date -d "$current_date -$days_to_subtract days -1 month" +"%Y%m%d") 或者写在一行: last_month_first_day=$(date -d "$current_date -$((10#$day - 1)) days -1 month" +"%Y%m%d") 注意:在算术展开中,我们使用`$(( ... ))`,在`...`内部,变量名前不需要加`$`,并且可以使用`10#`前缀来指定基数。 因此,修改`get_date_range`函数中的那一行,将`$(($10#$day - 1))`改为`$((10#$day - 1))`(注意去掉变量`day`前的`$`,因为在算术展开中变量名直接使用,且基数语法为`10#`后接变量名)。 但是,这里有一个细节:`day`变量是通过`date`命令获取的,是一个字符串,可能包含前导零。在算术表达式中,`10#$day`会将`day`解释为十进制数,即使它有前导零(例如`08`会变成8,`09`变成9)。 所以,我们修改后的`get_date_range`函数如下: ```bash get_date_range() { local current_date="$1" local day=$(date -d "$current_date" +%d) local last_month_first_day # 显式将 day 转换为十进制,然后进行算术运算 last_month_first_day=$(date -d "$current_date -$((10#$day - 1)) days -1 month" +"%Y%m%d") echo "$current_date $last_month_first_day" } ``` 这样修改后,就不会出现算术基数的错误了。 另外,注意在函数`generate_output`中,我们调用了`get_date_range`函数,并将`current_date`传递给它。`current_date`是从目录名中提取的,格式为YYYYMMDD(例如20250401),这是一个有效的日期字符串,可以被`date`命令解析。 完整修正后的代码如下:</think>### 修复 Bash 脚本中的算术错误并输出完整修正代码 问题分析:错误发生在以下代码行: ```bash last_month_first_day=$(date -d "$current_date -$(($10#$day - 1)) days -1 month" +"%Y%m%d") ``` 错误原因:当 `$day` 值以 `0` 开头时(如 `08`),Bash 会将其解释为八进制数,导致 `invalid arithmetic base` 错误。 #### 修复方案 使用 `${day#0}` 移除前导零,确保数值被正确解释为十进制: ```bash #!/bin/bash # 定义目标目录 base_dir="/home/trade/product_env/backup" output_file="${base_dir}/fout.txt" # 确保输出目录存在 mkdir -p "$(dirname "$output_file")" # 清空或创建输出文件 > "$output_file" # 动态计算日期范围:从指定日期到上个月的第一天 get_date_range() { local current_date="$1" local day=$(date -d "$current_date" +%d) local last_month_first_day # 修复:移除前导零确保十进制计算 local day_decimal=${day#0} # 移除前导零 # 计算上个月第一天 last_month_first_day=$(date -d "$current_date -$((day_decimal - 1)) days -1 month" +"%Y%m%d") echo "$current_date $last_month_first_day" } # 将 out.sh 的功能封装为函数 generate_output() { local log_path="$1" local output_file="$2" cd "$log_path" || return # 创建一个临时文件,用于保存经过处理后的唯一行 temp_file=$(mktemp) # 提取目录名作为当前日期(假设目录名格式为 YYYYMMDD) current_date=$(basename "$(dirname "$(dirname "$log_path")")") # 获取动态日期范围 read -r start_date end_date <<< "$(get_date_range "$current_date")" # 查找指定日期范围内的Log.txt文件 find . -name "*$start_date*Log.txt" -o -name "*$end_date*Log.txt" | while IFS= read -r file; do # 在文件中查找特定字段,并处理数据 grep -E "172.22.88.*result=okay:user=" "$file" | cut -d&#39;:&#39; -f6,8,9 | sort | uniq >> "$temp_file" done # 将临时文件内容写入输出文件 cat "$temp_file" > out.txt rm "$temp_file" # 合并并去重输出 sort out.txt | uniq >> "$output_file" rm "out.txt" } # 查找符合每月一号格式的目录(如 20250401) for dir in $(find "$base_dir" -mindepth 1 -maxdepth 1 -type d -name "[0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9]" | sort); do # 遍历 day 和 night 目录 for sub_dir in day night; do log_path="${dir}/${sub_dir}/log" if [ -d "$log_path" ]; then # 调用封装好的函数替代 out.sh generate_output "$log_path" "$output_file" fi done done # 最终去重和排序 sort -u "$output_file" -o "$output_file" echo "操作已完成,结果已汇总至 ${output_file}" ``` #### 关键修复点说明 1. **移除前导零**: ```bash local day_decimal=${day#0} # 移除前导零 ``` 使用参数扩展 `${var#pattern}` 移除变量值开头的 `0`,确保数值被正确解释为十进制[^1]。 2. **安全计算**: ```bash last_month_first_day=$(date -d "$current_date -$((day_decimal - 1)) days -1 month" +"%Y%m%d") ``` 使用处理后的十进制值进行日期计算,避免八进制解释错误。 #### 测试验证 修复后,脚本将正确处理以下日期格式: - `08` → 转换为 `8` - `09` → 转换为 `9` - `10` → 保持 `10`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值