Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

papiron
October 26, 2019

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

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

papiron

October 26, 2019
Tweet

More Decks by papiron

Other Decks in Programming

Transcript

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

    View Slide

  2. ࣗݾ঺հ
    • Twitter: @papiron
    • ෱ԬαςϥΠτ։࠵୲౰
    • ΠϯϑϥΤϯδχΞͬΆ͍
    • WebͳϓνΤϯδχΞͬΆ͍
    • ϝϯυ͍͘͞σʔλॲཧ୲౰
    • γΣϧͱRubyͱPHP

    View Slide

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

    View Slide

  4. awkͷศར͞
    • ೖྗ΍܁Γฦ͠ʹؔ͢Δهड़ෆཁ
    • IO͔Βreadͱ͔͕ෆཁ
    • ΞΫγϣϯ͸ຖߦ࣮ߦ
    • ύλʔϯʹΑΔ৚݅ࢦఆ
    • ifߏจΛ࢖͏ػձ͕ݮΔ
    • ศརͳ֤छม਺
    • ϑΟʔϧυม਺ʢ$0ɺ$1ɺɺɺʣ
    • ૊ΈࠐΈม਺ʢNRɺFNRɺNFͳͲʣ
    ϫϯϥΠφʔΛॻ͖΍͍͢ཁૉ͕ଟ͍

    View Slide

  5. awkͬΆ͘ॻ͖͍ͨ
    ଞͷݴޠͰ΋
    awkϥΠΫͳϫϯϥΠφʔΛॻ͖͍ͨ
    PerlͱRubyͰग़དྷΔ

    View Slide

  6. RubyͷawkϞʔυ
    • ΦϓγϣϯͰawkϥΠΫͳϞʔυʹ
    • -n ίʔυΛຖߦ࣮ߦ
    • -a ࣗಈϑΟʔϧυ෼ׂʢ$Fʣ
    • -l ߦ຤͔ΒվߦจࣈΛऔΓআ͘
    • -F ϑΟʔϧυ۠੾Γจࣈࢦఆ
    • ૊ΈࠐΈม਺ʢ$.ͳͲʣ
    • -rΦϓγϣϯͰϥΠϒϥϦಡΈࠐΈʢcsvͳͲʣ
    • BEGIN{}ͱEND{}͕࢖͑Δ

    View Slide

  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Ϟʔυ࣮ྫ

    View Slide

  8. ϫϯϥΠφʔಛԽίϚϯυ
    • rbίϚϯυ
    • https://github.com/thisredone/rb
    • RubyͷϫϯϥΠφʔಛԽ൛ϥούʔ
    • opyίϚϯυ
    • https://github.com/ryuichiueda/opy
    • PythonͰϫϯϥΠφʔ͸πϥΠ
    • Πϯσϯτࣗମ͕จ๏ͩͬͨΓ
    • ্ాձ௕࡞ͷϥούʔ

    View Slide

  9. rbίϚϯυ
    • ඪ४ೖྗ͔Βͷσʔλ͕Ϩγʔό
    • ௚઀ϝιου͕ॻ͚Δ
    • 2ͭͷϞʔυ
    • linesϞʔυ
    • ೖྗશମΛEnumeratorͱͯ͠ѻ͏
    • lineϞʔυʢ-lΦϓγϣϯʣ
    • 1ߦͣͭStringͱͯ͠ॲཧ͢Δ

    View Slide

  10. rbίϚϯυ࣮ྫ
    # Ϩγʔό͸Enumerator
    $ seq 3 | rb 'self.inspect'
    #>: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Ϟʔυ

    View Slide

  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Ϟʔυ

    View Slide

  12. rbͰग़དྷͳ͍͜ͱ
    • Φϓγϣϯ͸࢖͑ͳ͍
    • -FͰ۠੾Γจࣈࢦఆ͸ग़དྷͳ͍
    • -rͰϥΠϒϥϦಡΈࠐΈ͸ग़དྷͳ͍
    • ϑΟʔϧυͷࣗಈ෼ׂ
    • BEGINͱEND

    View Slide

  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
    ্ా͞ΜϒϩάΛࢀর

    View Slide

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

    View Slide