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

如何用Bash脚本提取指定模式对应数据并输出为CSV文件

问题描述

现有一份代码检查输出的文本文件,内容如下:

001_Two_Sum.py:48:5: CCR001 Cognitive complexity is too high (5 > 3)
001_Two_Sum.py:61:1: W293 blank line contains whitespace
002_Add_Two_Numbers.py:40:5: CCR001 Cognitive complexity is too high (7 > 3)
003_Longest_Substring_Without_Repeating_Characters.py:57:5: CCR001 Cognitive complexity is too high (4 > 3)

需要从中筛选出包含CCR001 Cognitive complexity的行,提取对应文件名和复杂度数值,生成指定格式的CSV文件:

filename,value
001_Two_Sum.py,5
002_Add_Two_Numbers.py,7
003_Longest_Substring_Without_Repeating_Characters.py,4

你之前尝试的脚本将所有文件名(含非目标行)和所有数值分别存入变量,输出时会导致文件名与数值无法一一对应,格式完全混乱。

解决方案

方法1:使用awk(推荐)

用awk直接筛选目标行并提取字段,一步生成符合要求的CSV:

echo "filename,value" > result.csv && awk '/CCR001 Cognitive complexity/ {split($0, arr, ":"); num=substr($NF, 2, index($NF, " ")-2); print arr[1] "," num}' file.txt >> result.csv
  • /CCR001 Cognitive complexity/:仅处理包含该标识的行
  • split($0, arr, ":"):将当前行按冒号分割,arr[1]即为文件名
  • substr($NF, 2, index($NF, " ")-2):提取最后一个字段(如(5 > 3))中的数字部分
  • 最终按文件名,数值格式打印,追加到CSV文件

方法2:组合grep与sed

若习惯用文本处理工具组合,可采用以下命令:

echo "filename,value" > result.csv && grep "CCR001 Cognitive complexity" file.txt | sed -E 's/^([^:]+):.*\(([0-9]+) > .*/\1,\2/' >> result.csv
  • grep先筛选出目标行
  • sed -E用正则捕获组:
    • ^([^:]+):捕获冒号前的文件名
    • \(([0-9]+) > .*:捕获括号内的复杂度数值
    • 替换为\1,\2即文件名,数值的格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:53:21