Skip to content

Instantly share code, notes, and snippets.

@papiron
Last active December 25, 2016 16:07
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save papiron/213ef730968f749d7d6b640aa79db10e to your computer and use it in GitHub Desktop.
Save papiron/213ef730968f749d7d6b640aa79db10e to your computer and use it in GitHub Desktop.
第26回シェル芸勉強会福岡サテライト分
Q2解答例
$ unzip -p 20141019OSC_LT.pptx 'ppt/slides/slide*' | grep -o 危険 | wc -l
17
Q4暫定解答
ポイント:正規表現の最長一致
$ unzip -p 20141019OSC_LT.pptx ppt/slides/slide7.xml | gsed 's/<a:p>/\n&/g' | grep '^<a:p>' | sed 's;<[^<>]*>;;g'
Q5暫定解答
ポイント:正規表現の最長一致
$ unzip -p graph.xlsx xl/worksheets/sheet1.xml | gsed 's/<row /\n&/g' | grep '^<row r' | sed 's;<[^<>]*>;;g'
<<閏年を列挙する>>
20世紀から24世紀までの閏年を列挙してください。(122個あるはず)
グレゴリオ暦による閏年の規則に則って
西暦年が4で割り切れる年は閏年。
ただし、西暦年が100で割り切れる年は平年。
ただし、西暦年が400で割り切れる年は閏年。
$ seq 1901 2400 | awk '$1%4==0{print $1,$1%100,$1%400}' | awk '!($2==0&&$3!=0){print $1}'
$ seq 1904 4 2400 > date4; seq 2000 100 2400 > date100; seq 2000 2400 > date400; cat date4 | cat - date100 | sort | uniq -u | cat - date400 | sort
$ seq 1904 4 2400 | cat - <(seq 2000 100 2400) | sort | uniq -u | cat - <(seq 2000 400 2400) | sort
日付数が366日の年が閏年
$ gseq $(gdate -d '1901/01/01 00:00:00' '+%s') 86400 $(gdate -d '2400/12/31 00:00:00' '+%s') | sed 's/^/@/' | gdate -f - '+%Y' | uniq -c | awk '$1==366{print $2}'
 ## dateutilsを利用(Ubuntuの場合はdateutils.dseq)
$ dateseq 1901-01-01 2400-12-31 | cut -c1-4 | uniq -c | awk '$1==366{print $2}'
 ## Tukubaiコマンド利用
$ mdate -e 19010101 24001231 | tarr | self 1.1.4 | count 1 1 | awk '$2==366{print $1}'
2月29日が存在すればええやろ?
$ gseq 19010229 10000 24000229 | gdate -f - '+%Y' 2> /dev/null
$ seq 1901 2400 | sed 's/$/0229/' | gdate -f - '+%Y' 2> /dev/null
$ seq -f '%g0229' 1901 2400 | gdate -f - '+%Y' 2> /dev/null
$ echo {1901..2400}0229 | xargs -n1 | gdate -f- '+%Y' 2>/dev/null
 ## dateutilsを利用(Ubuntuの場合はdateutils.dseq)
$ dateseq 1901-01-01 2400-12-31 | grep '02-29' | cut -c1-4
 ## Tukubaiコマンド利用
$ mdate -e 19010101 24001231 | tarr | grep '0229$' | self 1.1.4
3月1日の前日が2月29日ならいいでっしゃろ?
$ seq 1901 2400 | sed 's/$/0301-1day/' | gdate -f - '+%Y%m%d' | grep '29$' | cut -c 1-4
$ seq -f '%.f0301-1day' 1901 2400 | gdate -f - '+%Y%m%d' | grep '29$' | cut -c 1-4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment