如何使用shell脚本读取CSV文件并提取指定标记间的有效记录
你的原脚本存在以下问题:
- 仅匹配内容完全为
finance的行,大小写不匹配,也没有实现区间提取逻辑 - 没有记录当前所属的部门分类,无法生成符合要求的三列输出
- 没有过滤空行、无效行的逻辑
推荐使用awk实现该需求,处理结构化文本比纯Shell循环更高效稳定,命令如下:
awk ' BEGIN { FS = "," print "department,name,amount" } # 匹配部门区间开始,开启提取标记、记录当前部门 $1 == "Finance" { in_block = 1; dept = "Finance"; next } $1 == "Marketing" { in_block = 1; dept = "Marketing"; next } # 匹配部门区间结束,关闭提取标记 $1 == "Finance Total" || $1 == "Marketing Total" { in_block = 0; next } # 处理区间内的有效行:排除空行、字段为空的行 in_block == 1 && NF == 2 && $1 != "" && $2 != "" { print dept "," $1 "," $2 } ' file1.csv > output.csv
直接执行上述命令即可生成符合预期的output.csv文件。
内容的提问来源于stack exchange,提问作者Rummy
相关产品推荐
相关产品推荐

