Last active
December 6, 2015 14:35
-
-
Save papiron/eb3fc90f86c6167b2b1c to your computer and use it in GitHub Desktop.
シェル芸初心者向け勉強会:ウォーミングアップ問題(問題と解答)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<<<ウォーミングアップ問題:問題と解答>>> | |
問題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