ワンライナーに便利なコマンド

7b687d32752421ed7bdc2428e5e4b8e6?s=47 papiron
October 26, 2019

 ワンライナーに便利なコマンド

シェル芸勉強会福岡サテライトで話そうと思ったが、時間が無くてお蔵入りしたスライド。ワンライナーが書きやすいコマンド、というかプログラミング言語について紹介。

7b687d32752421ed7bdc2428e5e4b8e6?s=128

papiron

October 26, 2019
Tweet

Transcript

  1. ϫϯϥΠφʔʹศརͳ ίϚϯυ ˏpapiron

  2. ࣗݾ঺հ • Twitter: @papiron • ෱ԬαςϥΠτ։࠵୲౰ • ΠϯϑϥΤϯδχΞͬΆ͍ • WebͳϓνΤϯδχΞͬΆ͍

    • ϝϯυ͍͘͞σʔλॲཧ୲౰ • γΣϧͱRubyͱPHP
  3. γΣϧܳͱawk • ߦྻࢦ޲ͳσʔλͷѻ͍ • ֤छूܭॲཧ • ਺஋ܭࢉ΍จࣈྻॲཧ AWKΛ࢖͏͜ͱ͕ଟ͍ॲཧ

  4. awkͷศར͞ • ೖྗ΍܁Γฦ͠ʹؔ͢Δهड़ෆཁ • IO͔Βreadͱ͔͕ෆཁ • ΞΫγϣϯ͸ຖߦ࣮ߦ • ύλʔϯʹΑΔ৚݅ࢦఆ •

    ifߏจΛ࢖͏ػձ͕ݮΔ • ศརͳ֤छม਺ • ϑΟʔϧυม਺ʢ$0ɺ$1ɺɺɺʣ • ૊ΈࠐΈม਺ʢNRɺFNRɺNFͳͲʣ ϫϯϥΠφʔΛॻ͖΍͍͢ཁૉ͕ଟ͍
  5. awkͬΆ͘ॻ͖͍ͨ ଞͷݴޠͰ΋ awkϥΠΫͳϫϯϥΠφʔΛॻ͖͍ͨ PerlͱRubyͰग़དྷΔ

  6. RubyͷawkϞʔυ • ΦϓγϣϯͰawkϥΠΫͳϞʔυʹ • -n ίʔυΛຖߦ࣮ߦ • -a ࣗಈϑΟʔϧυ෼ׂʢ$Fʣ •

    -l ߦ຤͔ΒվߦจࣈΛऔΓআ͘ • -F ϑΟʔϧυ۠੾Γจࣈࢦఆ • ૊ΈࠐΈม਺ʢ$.ͳͲʣ • -rΦϓγϣϯͰϥΠϒϥϦಡΈࠐΈʢcsvͳͲʣ • BEGIN{}ͱEND{}͕࢖͑Δ
  7. $ echo 0 1 2 | ruby -alne 'puts $F[1]'

    1 $ cat data.txt user01,175,80 user02,170,65 user03,182,85 $ cat data.txt | ruby -F, -alne 'puts $F[1]' | xargs 175 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.66666666666667 RubyͷawkϞʔυ࣮ྫ
  8. ϫϯϥΠφʔಛԽίϚϯυ • rbίϚϯυ • https://github.com/thisredone/rb • RubyͷϫϯϥΠφʔಛԽ൛ϥούʔ • opyίϚϯυ •

    https://github.com/ryuichiueda/opy • PythonͰϫϯϥΠφʔ͸πϥΠ • Πϯσϯτࣗମ͕จ๏ͩͬͨΓ • ্ాձ௕࡞ͷϥούʔ
  9. rbίϚϯυ • ඪ४ೖྗ͔Βͷσʔλ͕Ϩγʔό • ௚઀ϝιου͕ॻ͚Δ • 2ͭͷϞʔυ • linesϞʔυ •

    ೖྗશମΛEnumeratorͱͯ͠ѻ͏ • lineϞʔυʢ-lΦϓγϣϯʣ • 1ߦͣͭStringͱͯ͠ॲཧ͢Δ
  10. rbίϚϯυ࣮ྫ # Ϩγʔό͸Enumerator $ seq 3 | rb 'self.inspect' #<Enumerator:

    #<IO:<STDIN>>:each_line> $ seq 100 | rb grep '/0$/' | xargs 10 20 30 40 50 60 70 80 90 100 # rubyͱൺֱ $ seq 100 | ruby -e 'puts STDIN.each_line.grep(/ 0$/)' | xargs 10 20 30 40 50 60 70 80 90 100 $ seq 10 | rb 'map{|i|i.to_i}.sum' 55 linesϞʔυ
  11. 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 | xargs 10 20 30 40 50 60 70 80 90 100 lineϞʔυ
  12. rbͰग़དྷͳ͍͜ͱ • Φϓγϣϯ͸࢖͑ͳ͍ • -FͰ۠੾Γจࣈࢦఆ͸ग़དྷͳ͍ • -rͰϥΠϒϥϦಡΈࠐΈ͸ग़དྷͳ͍ • ϑΟʔϧυͷࣗಈ෼ׂ •

    BEGINͱEND
  13. opyͷࢿྉ PythonΛίϚϯυϥΠϯͰ࢖͍͍ͨͷͰopyͱ͍͏ίϚϯυΛ࡞ͬͨ https://b.ueda.tech/?post=20190908_opy ࣗ࡞ίϚϯυʢopyʣΛbrewͱsnapʹରԠͨ͠ https://b.ueda.tech/?post=20190911_opy opyʹjoin, dropjoinΛ࣮૷ https://b.ueda.tech/?post=20190916 opyͰPythonͷSciPyͱNumPyΛϫϯϥΠφʔͰ࢖͏࣮ݧ https://b.ueda.tech/?post=20190929_opy

    ্ా͞ΜϒϩάΛࢀর
  14. ͋͑ͯawkΛ࢖͏ར఺ • େମೖ͍ͬͯΔ • ௥ՃΠϯετʔϧෆཁͳ৔߹͕ଟ͍ • ॲཧ͕ߴ଎ • େن໛ͳςΩετσʔλͷॲཧʹ