たいちょーの雑記

ぼくが3日に一度くらい雑記をかくところ

シェル芸160ノック19

9月末に発売されたシェル芸本の続きです。ついに100問を超えた

gihyo.jp

前回はこちら

xztaityozx.hatenablog.com

問題98

$ csvq -f CSV -n -r ./qdata/98/ 'select case when list1.c1 not in (select * from list2) then list1.c1 else "@" end, case when list2.c1 not in (select * from list1) then list2.c1 else "@" end, case when list1.c1 in (select * from list2) then list1.c1 else "@" end from list1, list2'  | sed 1d | sel -d, 0 | awk '{if($1!="@" && !a[$1]++) print $1 >> "oneside";if($2!="@" && !a[$2]++) print $2 >> "oneside";if($3!="@" && !a[$3]++) print $3 >> "common"}'

$ head oneside common
==> oneside <==
シュル芸
シァル芸

==> common <==
シェノ芸
シェル芸
シェレ芸
ンェル芸

問題99

# 小問1
cat qdata/99/cards.txt | ocs 'F.Skip(1).Where((v,i)=>i%2==0).Distinct().Count()==1{println(F0)}'789111389101112910111213


# 小問2
$ cat qdata/99/cards.txt | awk '($2==$4&&$4==$6&&$8==$10)||($2==$4&&$6==$8&&$8==$10)'55111111333111122131313

問題100

$ csvq -f CSV -n -r ./qdata/100/ "select * from $(echo {b..g} | fmt -1 | awk 'BEGIN{print "shiritori as a"}{print "cross join shiritori as "$1}' | paste -sd ' ')" | sed 1d | grep -Pe '(.+(.),\2){6}' | ocs -F, 'F.Skip(1).Distinct().Count()==7{println(F0)}'
けんこう,うがい,いちょう,うしみつどき,きゅうけい,いんどあ,あけがた
けんこう,うしみつどき,きゅうけい,いちょう,うがい,いんどあ,あけがた

重複なしの組み合わせを列挙すればよかったね

問題101

$ cat qdata/101/alphabet_connection | fmt -1 | sort | join - <(echo {a..z}|fmt -1) -a 2 -o 1.1 | awk '!/^$/{a=a","$1}/^$/{print a;a=""}END{print a}' | sd "^," '' | sed '/^$/d' | sd -- ',.*,?(.)' '-$1' | xargs
a-c e-f i-l p-r u w y-z

問題102

$ hoge() {echo "hoge $*"}; hoge fuga
hoge fuga

こういうことではないっぽいな…