我有一个文本文件,内容如下:
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