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)

我想要得到一个看起来像

的csv文件
filename,value
001_Two_Sum.py,5
002_Add_Two_Numbers.py,7
003_Longest_Substring_Without_Repeating_Characters.py,4

我有grep命令来获取文件名grep -o 'w+.py' file.txt和值grep 'Cognitive complexity is too high (' file.txt | cut -d "(" -f2 | cut -d -f1。我如何将这两者结合起来,以便我可以获得包含模式CCROO1 Cognitive Complexity的文件名?即,第2行中的文件名不输出,因为它不包含croo1…线。另外,我如何在csv文件中输出两个值,适当地显示文件名及其值?

这就是我想出来的

filename=$(grep -o 'w+.py' file.txt)
ccValue=$(grep 'Cognitive complexity is too high (' file.txt | cut -d "(" -f2 | cut -d  -f1)
echo "filename,cognitive_complexity" > test.csv; 
echo "$filename,$ccValue" >> test.csv

您可以使用awk

awk -F '[:(>]' -vOFS=, 'BEGIN {print "filename", "value"} $4 ~ /Cognitive complexity/ {print $1, $5}'

这个sed命令应该可以做到:

sed -n 's/([^:]*).*CCR001 Cognitive complexity is too high (([0-9]*).*/1,2/p' file

相关内容

  • 没有找到相关文章

最新更新