シェル芸勉強会福岡サテライトで話そうと思ったが、時間が無くてお蔵入りしたスライド。ワンライナーが書きやすいコマンド、というかプログラミング言語について紹介。
ϫϯϥΠφʔʹศརͳίϚϯυˏpapiron
View Slide
ࣗݾհ• Twitter: @papiron• ԬαςϥΠτ։࠵୲• ΠϯϑϥΤϯδχΞͬΆ͍• WebͳϓνΤϯδχΞͬΆ͍• ϝϯυ͍͘͞σʔλॲཧ୲• γΣϧͱRubyͱPHP
γΣϧܳͱawk• ߦྻࢦͳσʔλͷѻ͍• ֤छूܭॲཧ• ܭࢉจࣈྻॲཧAWKΛ͏͜ͱ͕ଟ͍ॲཧ
awkͷศར͞• ೖྗ܁Γฦ͠ʹؔ͢Δهड़ෆཁ• IO͔Βreadͱ͔͕ෆཁ• ΞΫγϣϯຖߦ࣮ߦ• ύλʔϯʹΑΔ݅ࢦఆ• ifߏจΛ͏ػձ͕ݮΔ• ศརͳ֤छม• ϑΟʔϧυมʢ$0ɺ$1ɺɺɺʣ• ΈࠐΈมʢNRɺFNRɺNFͳͲʣϫϯϥΠφʔΛॻ͖͍͢ཁૉ͕ଟ͍
awkͬΆ͘ॻ͖͍ͨଞͷݴޠͰawkϥΠΫͳϫϯϥΠφʔΛॻ͖͍ͨPerlͱRubyͰग़དྷΔ
RubyͷawkϞʔυ• ΦϓγϣϯͰawkϥΠΫͳϞʔυʹ• -n ίʔυΛຖߦ࣮ߦ• -a ࣗಈϑΟʔϧυׂʢ$Fʣ• -l ߦ͔ΒվߦจࣈΛऔΓআ͘• -F ϑΟʔϧυ۠Γจࣈࢦఆ• ΈࠐΈมʢ$.ͳͲʣ• -rΦϓγϣϯͰϥΠϒϥϦಡΈࠐΈʢcsvͳͲʣ• BEGIN{}ͱEND{}͕͑Δ
$ echo 0 1 2 | ruby -alne 'puts $F[1]'1$ cat data.txtuser01,175,80user02,170,65user03,182,85$ cat data.txt | ruby -F, -alne 'puts $F[1]' | xargs175 170 182$ cat data.txt | ruby -F, -alne 'BEGIN{a=0;b=0};a+=$F[1].to_i;b+=$F[2].to_i; END{print "ฏۉ:#{a.to_f/$.}ମॏฏۉ:#{b.to_f/$.}"}'ฏۉ:175.66666666666666 ମॏฏۉ:76.66666666666667RubyͷawkϞʔυ࣮ྫ
ϫϯϥΠφʔಛԽίϚϯυ• rbίϚϯυ• https://github.com/thisredone/rb• RubyͷϫϯϥΠφʔಛԽ൛ϥούʔ• opyίϚϯυ• https://github.com/ryuichiueda/opy• PythonͰϫϯϥΠφʔπϥΠ• Πϯσϯτࣗମ͕จ๏ͩͬͨΓ• ্ాձ࡞ͷϥούʔ
rbίϚϯυ• ඪ४ೖྗ͔Βͷσʔλ͕Ϩγʔό• ϝιου͕ॻ͚Δ• 2ͭͷϞʔυ• linesϞʔυ• ೖྗશମΛEnumeratorͱͯ͠ѻ͏• lineϞʔυʢ-lΦϓγϣϯʣ• 1ߦͣͭStringͱͯ͠ॲཧ͢Δ
rbίϚϯυ࣮ྫ# ϨγʔόEnumerator$ seq 3 | rb 'self.inspect'#>:each_line>$ seq 100 | rb grep '/0$/' | xargs10 20 30 40 50 60 70 80 90 100# rubyͱൺֱ$ seq 100 | ruby -e 'puts STDIN.each_line.grep(/0$/)' | xargs10 20 30 40 50 60 70 80 90 100$ seq 10 | rb 'map{|i|i.to_i}.sum'55linesϞʔυ
rbίϚϯυ࣮ྫ# Ϩγʔόೖྗ֤ߦͷจࣈྻ$ seq 3 | rb -l 'self.inspect' | tr '\n' ' '"1" "2" "3"$ echo 0,1,2 | rb -l 'split(",")[1]'1# Rubyͱൺֱ$ echo 0,1,2 | ruby -ne 'puts $_.split(",")[1]'1$ seq 100 | xargs -n 10 | rb -l split.last | xargs10 20 30 40 50 60 70 80 90 100lineϞʔυ
rbͰग़དྷͳ͍͜ͱ• Φϓγϣϯ͑ͳ͍• -FͰ۠Γจࣈࢦఆग़དྷͳ͍• -rͰϥΠϒϥϦಡΈࠐΈग़དྷͳ͍• ϑΟʔϧυͷࣗಈׂ• BEGINͱEND
opyͷࢿྉPythonΛίϚϯυϥΠϯͰ͍͍ͨͷͰopyͱ͍͏ίϚϯυΛ࡞ͬͨhttps://b.ueda.tech/?post=20190908_opyࣗ࡞ίϚϯυʢopyʣΛbrewͱsnapʹରԠͨ͠https://b.ueda.tech/?post=20190911_opyopyʹjoin, dropjoinΛ࣮https://b.ueda.tech/?post=20190916opyͰPythonͷSciPyͱNumPyΛϫϯϥΠφʔͰ͏࣮ݧhttps://b.ueda.tech/?post=20190929_opy্ా͞ΜϒϩάΛࢀর
͋͑ͯawkΛ͏ར• େମೖ͍ͬͯΔ• ՃΠϯετʔϧෆཁͳ߹͕ଟ͍• ॲཧ͕ߴ• େنͳςΩετσʔλͷॲཧʹ