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

シェル芸入門

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for yn2011 yn2011
April 25, 2019

 シェル芸入門

いかにしてワンライナーで問題を解くか

Avatar for yn2011

yn2011

April 25, 2019
Tweet

More Decks by yn2011

Other Decks in Technology

Transcript

  1. ϫϯϥΠφʔ • one liner / ศརͳҰߦ໺࿠ • ྫ • 2

    ~ 100ҎԼͷૉ਺Λશͯྻڍ $ seq 2 100 | factor | awk 'NF==2{print $2}'
  2. ϫϯϥΠφʔ • one liner / ศརͳҰߦ໺࿠ • ྫ • 2

    ~ 100ҎԼͷૉ਺Λશͯྻڍ $ seq 2 100 | factor | awk 'NF==2{print $2}'
  3. ղ౴ྫ $ matsuya | pee cat "grep -o ." rev

    | awk 'NR==1{a=$0;print}NR>1{printf $0;for(i=1;i<length(a)-1;i+ +)printf "ɹ";print substr(a,length(a)-NR+2,1)}' | sed 2d | tac | sed 2d | tac | sed '$s/.$//' ※ jusڞ࠵ ୈ37ճγΣϧܳbotੜ͖ͯΔ͔Ͳ͏͔෼͔Βͳ͍͚ͲγΣϧܳbot޲͚γΣϧܳษڧձ໰8ΑΓҾ༻
  4. ղ౴ྫ $ matsuya | pee cat "grep -o ." rev

    | awk 'NR==1{a=$0;print}NR>1{printf $0;for(i=1;i<length(a)-1;i+ +)printf "ɹ";print substr(a,length(a)-NR+2,1)}' | sed 2d | tac | sed 2d | tac | sed '$s/.$//' ※ jusڞ࠵ ୈ37ճγΣϧܳbotੜ͖ͯΔ͔Ͳ͏͔෼͔Βͳ͍͚ͲγΣϧܳbot޲͚γΣϧܳษڧձ໰8ΑΓҾ༻
  5. ղ౴ྫ $ matsuya | pee cat "grep -o ." rev

    | awk 'NR==1{a=$0;print}NR>1{printf $0;for(i=1;i<length(a)-1;i+ +)printf "ɹ";print substr(a,length(a)-NR+2,1)}' | sed 2d | tac | sed 2d | tac | sed '$s/.$//' ※ jusڞ࠵ ୈ37ճγΣϧܳbotੜ͖ͯΔ͔Ͳ͏͔෼͔Βͳ͍͚ͲγΣϧܳbot޲͚γΣϧܳษڧձ໰8ΑΓҾ༻
  6. ࿩͢͜ͱ • ஌ࣝฤ • γΣϧεΫϦϓτ • sedͱawk • ࣮ફฤ •

    จࣈྻͰ࣮ߦίϚϯυΛੜ੒͢Δ • ύΠϓͰՃ޻ͯ͠ग़ྗΛಘΔ • Ұ࣌తʹՃ޻ɾॲཧ͠΍͍͢ܗʹ͢Δ • ग़ྗΛύʔπʹ෼ղ͢Δ
  7. ࿩͢͜ͱ • ஌ࣝฤ • γΣϧεΫϦϓτ • sedͱawk • ࣮ફฤ •

    จࣈྻͰ࣮ߦίϚϯυΛੜ੒͢Δ • ύΠϓͰՃ޻ͯ͠ग़ྗΛಘΔ • Ұ࣌తʹՃ޻ɾॲཧ͠΍͍͢ܗʹ͢Δ • ग़ྗΛύʔπʹ෼ղ͢Δ
  8. ࿩͢͜ͱ • ஌ࣝฤ • γΣϧεΫϦϓτ • sedͱawk • ࣮ફฤ •

    จࣈྻͰ࣮ߦίϚϯυΛੜ੒͢Δ • ύΠϓͰՃ޻ͯ͠ग़ྗΛಘΔ • Ұ࣌తʹՃ޻ɾॲཧ͠΍͍͢ܗʹ͢Δ • ग़ྗΛύʔπʹ෼ղ͢Δ
  9. ࿩͢͜ͱ • ஌ࣝฤ • γΣϧεΫϦϓτ • sedͱawk • ࣮ફฤ •

    จࣈྻͰ࣮ߦίϚϯυΛੜ੒͢Δ • ύΠϓͰՃ޻ͯ͠ग़ྗΛಘΔ • Ұ࣌తʹՃ޻ɾॲཧ͠΍͍͢ܗʹ͢Δ • ग़ྗΛύʔπʹ෼ղ͢Δ
  10. จࣈྻͰ࣮ߦίϚϯυΛੜ੒͢ Δ • ղ౴ྫ $ ls | nkf -Z4 |

    tr a A | sed 's/[--]/೥/' | sed 's/\([A-E]\)\./\1 ૊./' | sed 's/1A/1೥A/' | paste <(ls) - | sed 's/^/mv /'| sh ※jusڞ࠵ ୈ36ճࣣ༦ɾɾɾ7͸ૉ਺͡Όͳ͍Ͱ͔͢ʢ͔͠΋2ͭʣγΣϧܳษڧձ ໰2ΑΓҾ༻
  11. จࣈྻͰ࣮ߦίϚϯυΛੜ੒͢ Δ • ղ౴ྫ $ ls | nkf -Z4 |

    tr a A | sed 's/[--]/೥/' | sed 's/\([A-E]\)\./\1 ૊./' | sed 's/1A/1೥A/' | paste <(ls) - | sed 's/^/mv /'| sh ※jusڞ࠵ ୈ36ճࣣ༦ɾɾɾ7͸ૉ਺͡Όͳ͍Ͱ͔͢ʢ͔͠΋2ͭʣγΣϧܳษڧձ ໰2ΑΓҾ༻
  12. จࣈྻͰ࣮ߦίϚϯυΛੜ੒͢ Δ • ղ౴ྫ $ ls | nkf -Z4 |

    tr a A | sed 's/[--]/೥/' | sed 's/\([A-E]\)\./\1 ૊./' | sed 's/1A/1೥A/' | paste <(ls) - | sed 's/^/mv /'| sh ※jusڞ࠵ ୈ36ճࣣ༦ɾɾɾ7͸ૉ਺͡Όͳ͍Ͱ͔͢ʢ͔͠΋2ͭʣγΣϧܳษڧձ ໰2ΑΓҾ༻
  13. จࣈྻͰ࣮ߦίϚϯυΛੜ੒͢ Δ • ղ౴ྫ $ ls | nkf -Z4 |

    tr a A | sed 's/[--]/೥/' | sed 's/\([A-E]\)\./\1 ૊./' | sed 's/1A/1೥A/' | paste <(ls) - | sed 's/^/mv /'| sh ※jusڞ࠵ ୈ36ճࣣ༦ɾɾɾ7͸ૉ਺͡Όͳ͍Ͱ͔͢ʢ͔͠΋2ͭʣγΣϧܳษڧձ ໰2ΑΓҾ༻
  14. ࿩͢͜ͱ • ஌ࣝฤ • γΣϧεΫϦϓτ • sedͱawk • ࣮ફฤ •

    จࣈྻͰ࣮ߦίϚϯυΛੜ੒͢Δ • ύΠϓͰՃ޻ͯ͠ग़ྗΛಘΔ • Ұ࣌తʹՃ޻ɾॲཧ͠΍͍͢ܗʹ͢Δ • ग़ྗΛύʔπʹ෼ղ͢Δ
  15. ࿩͢͜ͱ • ஌ࣝฤ • γΣϧεΫϦϓτ • sedͱawk • ࣮ફฤ •

    จࣈྻͰ࣮ߦίϚϯυΛੜ੒͢Δ • ύΠϓͰՃ޻ͯ͠ग़ྗΛಘΔ • Ұ࣌తʹՃ޻ɾॲཧ͠΍͍͢ܗʹ͢Δ • ग़ྗΛύʔπʹ෼ղ͢Δ
  16. Ұ࣌తʹՃ޻ɾॲཧ͠΍͍͢ܗ ʹ͢Δ • ղ౴ྫ $ cat herohero | sed 'y/̍̏̓̕/1379/'

    | sed -r 's/[0-9]+/& /' | awk '{printf("%02d %s\n",$1,$2)}' | sort -k1,1n -k2,2r - <(seq -w 12) | uniq -w2 | awk '{print $2}’ ※jusڞ࠵ ୈ35ճ·ͨ·ͨΊͰ͍ͨγΣϧܳษڧձ ໰2ΑΓҾ༻
  17. Ұ࣌తʹՃ޻ɾॲཧ͠΍͍͢ܗ ʹ͢Δ • ղ౴ྫ $ cat herohero | sed 'y/̍̏̓̕/1379/'

    | sed -r 's/[0-9]+/& /' | awk '{printf("%02d %s\n",$1,$2)}' | sort -k1,1n -k2,2r - <(seq -w 12) | uniq -w2 | awk '{print $2}’ ※jusڞ࠵ ୈ35ճ·ͨ·ͨΊͰ͍ͨγΣϧܳษڧձ ໰2ΑΓҾ༻
  18. Ұ࣌తʹՃ޻ɾॲཧ͠΍͍͢ܗ ʹ͢Δ • ղ౴ྫ $ cat herohero | sed 'y/̍̏̓̕/1379/'

    | sed -r 's/[0-9]+/& /' | awk '{printf("%02d %s\n",$1,$2)}' | sort -k1,1n -k2,2r - <(seq -w 12) | uniq -w2 | awk '{print $2}’ ※jusڞ࠵ ୈ35ճ·ͨ·ͨΊͰ͍ͨγΣϧܳษڧձ ໰2ΑΓҾ༻
  19. Ұ࣌తʹՃ޻ɾॲཧ͠΍͍͢ܗ ʹ͢Δ • ղ౴ྫ $ cat herohero | sed 'y/̍̏̓̕/1379/'

    | sed -r 's/[0-9]+/& /' | awk '{printf("%02d %s\n",$1,$2)}' | sort -k1,1n -k2,2r - <(seq -w 12) | uniq -w2 | awk '{print $2}’ ※jusڞ࠵ ୈ35ճ·ͨ·ͨΊͰ͍ͨγΣϧܳษڧձ ໰2ΑΓҾ༻
  20. Ұ࣌తʹՃ޻ɾॲཧ͠΍͍͢ܗ ʹ͢Δ • ղ౴ྫ $ dseq 2018-01-01 2018-12-31 | tr

    -d - | awk '{printf $0" ";print gsub(/[2357]/,"")}' | awk '$2==4' ※jusڞ࠵ ୈ36ճࣣ༦ɾɾɾ7͸ૉ਺͡Όͳ͍Ͱ͔͢ʢ͔͠΋2ͭʣγΣϧܳษڧձ ໰3ΑΓҾ༻
  21. Ұ࣌తʹՃ޻ɾॲཧ͠΍͍͢ܗ ʹ͢Δ • ղ౴ྫ $ dseq 2018-01-01 2018-12-31 | tr

    -d - | awk '{printf $0" ";print gsub(/[2357]/,"")}' | awk '$2==4' ※jusڞ࠵ ୈ36ճࣣ༦ɾɾɾ7͸ૉ਺͡Όͳ͍Ͱ͔͢ʢ͔͠΋2ͭʣγΣϧܳษڧձ ໰3ΑΓҾ༻
  22. Ұ࣌తʹՃ޻ɾॲཧ͠΍͍͢ܗ ʹ͢Δ • ղ౴ྫ $ dseq 2018-01-01 2018-12-31 | tr

    -d - | awk '{printf $0" ";print gsub(/[2357]/,"")}' | awk '$2==4' ※jusڞ࠵ ୈ36ճࣣ༦ɾɾɾ7͸ૉ਺͡Όͳ͍Ͱ͔͢ʢ͔͠΋2ͭʣγΣϧܳษڧձ ໰3ΑΓҾ༻
  23. Ұ࣌తʹՃ޻ɾॲཧ͠΍͍͢ܗ ʹ͢Δ • ղ౴ྫ $ dseq 2018-01-01 2018-12-31 | tr

    -d - | awk '{printf $0" ";print gsub(/[2357]/,"")}' | awk '$2==4' ※jusڞ࠵ ୈ36ճࣣ༦ɾɾɾ7͸ૉ਺͡Όͳ͍Ͱ͔͢ʢ͔͠΋2ͭʣγΣϧܳษڧձ ໰3ΑΓҾ༻
  24. ࿩͢͜ͱ • ஌ࣝฤ • γΣϧεΫϦϓτ • sedͱawk • ࣮ફฤ •

    จࣈྻͰ࣮ߦίϚϯυΛੜ੒͢Δ • ύΠϓͰՃ޻ͯ͠ग़ྗΛಘΔ • Ұ࣌తʹՃ޻ɾॲཧ͠΍͍͢ܗʹ͢Δ • ग़ྗΛύʔπʹ෼ղ͢Δ
  25. ग़ྗΛύʔπʹ෼ղ͢Δ • ղ౴ྫ $ echo 'ڹ͚ʂϢʔϑΥχΞϜ' | awk '{a=$1;for(i=1;i<=6;i++) {print

    substr($1,1,length(a)/2-i+1)substr($1,length(a)/2+i)}}' | pee cat 'rev | tac' | awk '{for(i=1;i<=5-length($0)/2;i++){printf "ɹ“}print}' ※jusڞ࠵ ୈ35ճ·ͨ·ͨΊͰ͍ͨγΣϧܳษڧձ ໰5ΑΓҾ༻
  26. ग़ྗΛύʔπʹ෼ղ͢Δ • ղ౴ྫ $ echo 'ڹ͚ʂϢʔϑΥχΞϜ' | awk '{a=$1;for(i=1;i<=6;i++) {print

    substr($1,1,length(a)/2-i+1)substr($1,length(a)/2+i)}}' | pee cat 'rev | tac' | awk '{for(i=1;i<=5-length($0)/2;i++){printf "ɹ“}print}' ※jusڞ࠵ ୈ35ճ·ͨ·ͨΊͰ͍ͨγΣϧܳษڧձ ໰5ΑΓҾ༻
  27. ग़ྗΛύʔπʹ෼ղ͢Δ • ղ౴ྫ $ echo 'ڹ͚ʂϢʔϑΥχΞϜ' | awk '{a=$1;for(i=1;i<=6;i++) {print

    substr($1,1,length(a)/2-i+1)substr($1,length(a)/2+i)}}' | pee cat 'rev | tac' | awk '{for(i=1;i<=5-length($0)/2;i++){printf "ɹ“}print}' ※jusڞ࠵ ୈ35ճ·ͨ·ͨΊͰ͍ͨγΣϧܳษڧձ ໰5ΑΓҾ༻