labunix's blog

labunixのラボUnix

あるキーワードの年毎のCVE数の集計(シェル芸)

■あるキーワードの年毎のCVE数の集計(シェル芸)
 以下ではgrepとawkではさんで組み合わせてた。

 chroot-jessieにJava(JDK8)をインストールする。
 http://labunix.hateblo.jp/entry/20150426/1430059121

$ grep -i java allitems.csv | \
      awk -F, '/^CVE/ {print $1}' | cut -c 5-8 | \
      awk '{a[$1]+=1};END{for (n in a){print n,a[n]}}' | sort -nr -k2
2013 331
2014 232
2009 231
2010 206
2006 202
2008 198
2007 193
2012 177
2011 168
2005 130
2002 117
2004 62
2015 54
2001 47
2003 34
2000 28
1999 18

■以下でだいぶすっきっりした。
 「BEGIN {IGNORECASE=1}」で大文字小文字を区別しない。
 「^CVE」検索と「java」の大文字小文字を区別しない検索をまとめる。
 「BEGIN」を省略。
 「substr」で(cut文)を減らす。

$ awk -F, '{IGNORECASE=1}; \
          /^CVE.*java/ {a[substr($1,5,4)]+=1}; \
             END {for (n in a){print n,a[n]}}' allitems.csv | sort -k2 -nr
2013 331
2014 232
2009 231
2010 206
2006 202
2008 198
2007 193
2012 177
2011 168
2005 130
2002 117
2004 62
2015 54
2001 47
2003 34
2000 28
1999 18

■おまけ。

$ awk -F, '{IGNORECASE=1}; \
          /^CVE.*debian/ {a[substr($1,5,4)]+=1}; \
             END {for (n in a){print n,a[n]}}' allitems.csv | sort -k2 -nr
2014 632
2013 612
2008 607
2007 513
2005 510
2006 509
2009 482
2011 429
2010 420
2012 370
2004 292
2003 246
2002 182
2015 114
2001 105
2000 63
1999 54

$ awk -F, '{IGNORECASE=1}; \
          /^CVE.*redhat/ {a[substr($1,5,4)]+=1}; \
             END {for (n in a){print n,a[n]}}' allitems.csv | sort -k2 -nr
2013 1037
2010 777
2011 756
2012 744
2014 732
2008 694
2009 644
2007 535
2005 449
2006 377
2004 292
2002 216
2003 196
2015 156
2001 156
2000 104
1999 52