はじめてシェル芸勉強会に現地参加した。すごい強い人が多くて怖い..。
問題と模範解答は 以下から。
Q1
joinコマンドを使えばうまく結合できる.
$ join -a 1 -a 2 kadai1 kadai2
001 山田 20 山田 20
002 出川 30
003 上田 15
004 今泉 22
005 鳥海 44 鳥海 44
Q2
このあたりはまだ理解できた.
$ join -a 1 -a 2 attend <(cat attend6 | tr ',' 'n' | sort | sed 's/$/ 出/g') | awk '{ if ($4 != "") print $0; else print $0 "欠"}'|sed 's/ 出$/出/g'
Q3
ここは解答を見てなるほどなぁ…と思った。
$ join -a 1 -o 1.1,1.2,1.3,2.2 -e 0 attend test | awk '/(.*欠){3}/{$4=0}{print}'
-eで埋められる。joinの-oはカンマ区切りとスペース区切りの違いがある。MacとBSDは注意。
Q4
これ以降は厳しかった..。答え見ながら復習。
$ cat q4-1 | tr ' ' 'n' | sort -n | awk 'length(a)!=length($1){print ""}{printf("%d ",$1);a=$1}'|awk NF
-11
> -9 -1
> 2 4 5
> 42 44
> 311 421
Q5
ここも答えみながら復習。
$ cat triangle | awk '{for(i=NF;i<=3;i++)printf " 0";print}'|xargs -n 4 | tac | rs -T
ここで使っているrs -T
がかなり強力で行と列の入れ替えが出来てしまう.
Q6
ここは自分なりに少しがんばれた。
【シェル芸人】10000 までの素数を出力するコマンド【Linux】 – oki2a24
上記サイトを参考にした.
echo -e $(join -a 1 -a 2 -o 1.1 2.1 -e "n" <(seq 2 100 | factor | awk 'NF==2{print $2}') <(cat prime | tr ' ' 'n')|awk '{print $2}'|tr 'n' ' ')|grep -v '^$'
join -a 1 -a 2 -o 2.1 -e "br" <(seq 2 100|factor|awk 'NF==2{print $2}') <(cat prime | tr ' ' 'n')|tr 'n' ' '|sed "s/br */n/g"|grep -v '^$'
Q7-8
これはかなり難しい。職人芸というほかない..。
w3mでも解答になるのが面白かった.
まとめ
シェル芸勉強会はリモート参加以上に現地参加は面白かった。awkをもっと勉強したいと思った。今度参加する時は懇親会にも参加したい。