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

シェル芸入門

yn2011
April 25, 2019

 シェル芸入門

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

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ΑΓҾ༻