Skip to content

Instantly share code, notes, and snippets.

@papiron
Last active December 6, 2015 14:35
Show Gist options
  • Save papiron/eb3fc90f86c6167b2b1c to your computer and use it in GitHub Desktop.
Save papiron/eb3fc90f86c6167b2b1c to your computer and use it in GitHub Desktop.
シェル芸初心者向け勉強会:ウォーミングアップ問題(問題と解答)
<<<ウォーミングアップ問題:問題と解答>>>
問題1
1から10まで合計を計算してください
解答
手続き型で
$ sum=0;i=1;while [ $i -le 10 ] ;do sum=`expr $sum + $i`; i=`expr $i + 1`; done; echo $sum
55
$ sum=0;i=1;while [ $i -le 10 ] ;do sum=$(($sum + $i)); i=$(($i + 1)); done; echo $sum
$ sum=0; for i in {1..10}; do sum=$(($sum+$i)); done ; echo $sum
横に足し算
$ echo {1..10} | tr ' ' '+' | bc
55
$ echo {1..10} | awk '{for(i=1;i<=NF;i++)sum+=$i;print sum}'
$ echo {1..10} | numsum -r
$ echo {1..10] | ysum | self NF
縦に足し算
$ seq 1 10 | numsum
$ seq 1 10 | awk '{sum+=$1}END{print sum}'
$ seq 1 10 | sm2 0 0 1 1
問題2
下記のファイルを2列目の数字の小さい順に並べ替えてください。
$ cat list
b 11
d 5
a 3
e 4
c 2
解答
$ sort -k2,2n list
c 2
a 3
e 4
d 5
b 11
問題3
文字列の並びを逆にしてください
$ echo 'a b c'
解答
$ echo 'a b c' | tr ' ' '\n' | sort -r | tr '\n' ' ' | gsed 's/$/\n/'
c b a
$ echo 'a b c' | xargs -n 1 | sort -r | xargs
$ echo 'a b c' | awk '{for(i=NF;i>=1;i--)printf $i" "}' | sed 's/ *$//'
$ echo 'a b c' | rev
問題4
下記の日付一覧から、月毎の日の数を数えてください
$ cat date1
20150101
20150121
20150201
20150202
20150203
20150310
解答
$ cat date1 | awk '{a[substr($1,1,6)]+=1}END{for(v in a)print v,a[v]}'
201501 2
201502 3
201503 1
$ cat date1 | awk '{print substr($1,1,6)}' | awk '{a[$1]+=1}END{for(v in a)print v,a[v]}'
$ cat date1 | awk '{print substr($1,1,6)}' | uniq -c
$ cat date1 | xargs -I@ gdate -d @ '+%Y%m' | uniq -c
$ cat date1 | gdate -f - '+%Y%m' | uniq -c
$ cat date1 | self 1.1.6 | count 1 1
問題5
日付と商品が売れた数があります。月毎の商品の売れた数を数えてください。
cat date2
20150101 1
20150121 2
20150201 5
20150202 2
20150203 3
20150310 2
解答
$ cat date2 | awk '{a[substr($1,1,6)]+=$2}END{for(v in a)print v,a[v]}'
201501 3
201502 10
201503 2
$ cat date2 | awk '{print substr($1,1,6),$2}' | awk '{a[$1]+=$2}END{for(v in a)print v,a[v]}'
$ cat date2 | self 1.1.6 2 | sm2 1 1 2 2
問題6
下記のファイルの積集合と和集合を出力してください
$ cat data1
a
b
c
d
$ cat data2
b
d
e
解答
積集合
$ cat data1 data2 | sort | uniq -d
b
d
$ grep -f data1 data2
$ comm -1 -2 data1 data2
和集合
$ cat data1 data2 | sort | uniq
a
b
c
d
e
$ cat data1 data2 | sort -u
$ sort -mu data1 data2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment