Skip to content

Instantly share code, notes, and snippets.

@akanehara
Last active June 29, 2016 08:35
Show Gist options
  • Save akanehara/cbf2b468d3d8e9c64681a6d72cb8be27 to your computer and use it in GitHub Desktop.
Save akanehara/cbf2b468d3d8e9c64681a6d72cb8be27 to your computer and use it in GitHub Desktop.
シェル芸勉強会第23回
curl http://www.data.jma.go.jp/fcd/yoho/typhoon/statistics/landing/landing.csv | nkf -wLux > landing.csv
# Q1
gcat landing.csv | gtail -n+2 | gawk -F',' '{y=$1;for(m=1;m<=12;m++){printf("%04d%02d %d\n",y,m,$(m+1))}}' > monthly_typhoon
# Q2
diff <(gcat monthly_typhoon | gawk '{a[substr($1,0,4)]+=$2}END{for(i in a){print i,a[i]}}' | gsort -k1,1) \
<(gcat landing.csv | gtail -n+2 | gawk -F',' '!$NF{$NF=0}{print $1,$NF}')
# Q3
gcat monthly_typhoon | gawk '{print substr($1,5,6),$2}' | gawk '{t[$1]++;r[$1]+=$2}END{for(m in t){print m,r[m]/t[m]}}' | sort -k1,1
# Q4
gcat monthly_typhoon | awk '$2{print substr($1,1,4),substr($1,5,6),$2}' | gsort -uk1,1 | gawk '{a[$2]++}END{for(i in a){print i, a[i]}}' | sort -k1,1
# Q4 別解
gcat monthly_typhoon | awk '$2' | guniq -w4 | gawk '{a[substr($1,5,6)]++}END{for(m in a){print m, a[m]}}' | gsort -k1,1
# Q5
gcat monthly_typhoon | gawk '{a[substr($1,1,4)]+=$2}END{for(y in a){print y, a[y]}}' | gawk '$2==0'
# Q5 別解(0の月が12回)
gcat monthly_typhoon | ggrep ' 0$' | gsed 's/.. 0$//' | guniq -c | grep '12 '
# Q6
gcat hittakuri | gawk '{a[$1]++}END{for(i in a){print a[i],i}}' | gsort -nrk1,1
# Q6 別解 uniq -c を使う
gcat hittakuri | gawk '$0=$1' | gsort | guniq -c | gsort -nrk1,1
# Q7
gjoin -1 1 -2 2 <(gcat OSAKA/population_h27sep | LANG=C gsort -k1,1) <(gcat hittakuri | gawk '$0=$1' | gsort | guniq -c | LANG=C gsort -k2,2) | gawk '{print $1,$3/$2}'
# Q8 場所と日付の組で集計
cat hittakuri | awk '{print $1$2$3$8$9$(10)}' | sort | uniq -c | awk '2<=$1'
# Q8 別解 sort -d で重複だけが得られる
cat hittakuri | awk '{print $1$2$3$8$9$(10)}' | sort | uniq -d
# Q9
cat hittakuri | awk '$6="ひったくり"{print $7,$5}' | awk '{t[$1]++}$2=="既遂"{s[$1]++}END{for(x in t){print x, s[x]/t[x]}}'
# memo
xxd -ps | head -c $n
less -S
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment