如何用BASH脚本结合AWK、GREP和管道提取损失时段轮盘赌发牌员信息
提取损失发生时轮盘赌发牌员信息的Bash脚本实现
前提说明
- 假设损失时间记录文件为
loss_records.txt,每行格式示例:03/10/2020 08:00:00 AM - 排班文件命名规则为
MMDD_Dealer_schedule(比如3月10日对应0310_Dealer_schedule) - 排班文件中,每行时间格式为
HH:MM:SS AM/PM,轮盘赌发牌员的名和姓位于第3、4列(可根据实际文件结构调整列数)
脚本代码
#!/bin/bash # 逐行读取损失记录文件 while read -r line; do # 从记录中提取日期并转换为MMDD格式(适配排班文件名) date_code=$(echo "$line" | awk '{split($1, d, "/"); printf "%02d%02d", d[1], d[2]}') # 提取时间与AM/PM标记 target_time=$(echo "$line" | awk '{print $2, $3}') # 拼接目标排班文件名 schedule="${date_code}_Dealer_schedule" # 检查排班文件是否存在 if [ -f "$schedule" ]; then # 匹配对应时间行,提取轮盘赌发牌员姓名 dealer=$(grep "^$target_time" "$schedule" | awk '{print $3, $4}') # 格式化输出结果 echo "时间: $target_time | 轮盘赌发牌员: $dealer" else echo "警告:未找到排班文件 $schedule" fi done < loss_records.txt
关键逻辑说明
- 日期格式转换:通过
awk拆分日期字段,用printf将MM/DD格式转为MMDD,匹配排班文件命名规则 - 时间匹配:用
grep精准定位排班文件中对应时间的行(^确保匹配行首时间,避免部分匹配) - 字段提取:用
awk提取指定列的发牌员姓名,可根据实际排班文件的列位置调整$3, $4 - 异常处理:检查排班文件是否存在,避免因文件缺失导致的报错
示例测试
假设loss_records.txt内容:
03/10/2020 08:00:00 AM
03/11/2020 09:30:00 PM
0310_Dealer_schedule内容:
08:00:00 AM John Doe Jane Smith
09:00:00 AM Alice Bob Charlie Brown
运行脚本后输出:
时间: 08:00:00 AM | 轮盘赌发牌员: John Doe 警告:未找到排班文件 0311_Dealer_schedule
内容的提问来源于stack exchange,提问作者pat Markey
相关产品推荐
相关产品推荐

