■あるキーワードの年毎の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