Mais conteúdo relacionado
Mais de Ryuichi Ueda (20)
20131222 第8回シェル芸勉強会スライド
- 5. 今回の進め方
• ビギナー置いてきぼり現象にメス
• 4〜6人でチーム分け
– できる人+そこそこの人+ビギナー※
(※自称ビギナー除く)
– できる人:とりまとめ
– そこそこの人:考える、ビギナーの人のサポート
– ビギナーの人:見て真似をする
2013/12/22
第8回シェル芸勉強会
5
- 6. • 問題は8問
• 1問15分
• 解答はUbuntu
Linuxで作りました。
2013/12/22
第8回シェル芸勉強会
6
- 8. 解答
• $
echo
{1..10}
|
xargs
-‐n
2
|
awk
'{print
$2,$1}'
|
xargs
• $
echo
{1..10}
|
awk
'{for(i=1;i<=9;i+=2){print
$(i+1),$i}}'
|
xargs
• $
echo
{1..10}
|
sed
's/[0-‐9]*
[0-‐9]*
/&n/g'
|
awk
'{print
$2,$1}'
|xargs
• Tukubai使用
– $
echo
{1..10}
|
yarr
-‐2
|
self
2
1
|
yarr
2013/12/22
第8回シェル芸勉強会
8
- 10. 解答
• $
echo
<省略>|
grep
-‐oE
"(ユニゲージ|ユニケージ|USP|UPS)"
|
sort
|
uniq
-‐c
• ファイルを使う方法
– $
cat
memo
ユニケージ
ユニゲージ
USP
UPS
– $
echo
<省略>|
grep
-‐o
-‐f
memo
|
sort
|
uniq
-‐c
2013/12/22
第8回シェル芸勉強会
10
- 12. 解答
• $
ls
file[1-‐4]
|
xargs
md5sum
|
awk
'{a[$1]
=
a[$1]"
"$2}END{for(v
in
a){print
a[v]}}'
|
awk
'NF>1'
• Tukubai使用
– $
ls
file[1-‐4]
|
xargs
md5sum
|
sort
|
yarr
num=1
|
awk
'NF>2'
2013/12/22
第8回シェル芸勉強会
12
- 14. 解答
• $
echo
3
8
2
10
1
8
9
|
tr
'
'
'n'
|
awk
'{print
$1%2,$1}'
|
sort
-‐s
-‐k1,1
|
awk
'{print
$2}'
|
xargs
• $
echo
3
8
2
10
1
8
9
|
tr
'
'
'n'
|
awk
'BEGIN{b=0}$1%2{a[b]=$1;b++}$1%2==0{print}
END{for(i=0;i<b;i++){print
a[i]}}'
|
xargs
2013/12/22
第8回シェル芸勉強会
14
- 15. 問題5
• 次のように連続した0と1の数を数え、
次のように変換してください
– 0と1が連続したときは0
or
1の後ろに
個数をつけてスペースを挿入
– 0と1が連続していないときはスペース区切りでそのまま出力
– 例
• 入力:
000001111111111001010
• 出力:
05
110
02
1
0
1
0
2013/12/22
第8回シェル芸勉強会
15
- 16. 解答
• $
echo
000001111111111001010
|
sed
's/./&n/g'
|
uniq
-‐c
|
awk
'NF==2{print
$2,$1}'
|
sed
's/
1$//'
|
tr
-‐d
'
'
|
xargs
2013/12/22
第8回シェル芸勉強会
16
- 17. 問題6
• 数字の列を次のように整形してください
– 小さい順に空白区切りで並んだ自然数に対し、
2個以上の数字が連続した場合は両端の数字だけ残して
間にハイフンを入れる
– 例
• 入力:1
2
3
5
6
8
10
11
12
15
• 出力:1-‐3
5-‐6
8
10-‐12
15
2013/12/22
第8回シェル芸勉強会
17
- 18. 解答
• $
echo
1
2
3
5
6
8
10
11
12
15
|
tr
'
'
'n'
|
awk
'BEGIN{a=1}{print
($1-‐a==1?",":"
")$1;a=$1}'
|
tr
-‐d
'n'
|
sed
's/$/n/g'
|
sed
's/,[^
]*,/-‐/g'
|
tr
","
"-‐"
• $
echo
1
2
3
5
6
8
10
11
12
15
|
awk
'{for(i=1;i<=NF;i++){print
$i,$(i+1)-‐$i}}'
|
awk
'$2==1{print
$1","}$2!=1{print
$1"
"}'
|
tr
-‐d
'n'
|
tr
','
'-‐'
|
sed
's/-‐[0-‐9]*-‐/-‐/g'
|
awk
'{print}'
• $
echo
1
2
3
5
6
8
10
11
12
15
|
xargs
-‐n
1
|
awk
'{print
$1,$i-‐a;a=$1}'
|
awk
'$2>1{print
"";prino
$1"
"}
$2==1{prino
$1"
"}'
|
awk
'{print
$1,$NF}'
|
awk
'$1==$2{print
$1}$1!=$2{print}'
|
tr
'
'
'-‐'
|
xargs
2013/12/22
第8回シェル芸勉強会
18
- 20. 解答
• $
seq
-‐w
000
999
|
while
read
n
;
do
echo
-‐n
$n"
"
;echo
-‐n
$n
|
md5sum;
done
|
grep
250cf8b51
• $
echo
'echo
-‐n
@"
";
echo
-‐n
@
|
md5sum'
|
awk
'{for(i=0;i<=999;i++){print}}'
|
awk
'{gsub(/@/,sprino("%03d",NR-‐1),$0);print}'
|
sh
|
grep
250cf8b51
2013/12/22
第8回シェル芸勉強会
20
- 22. 解答
• Tukubai使用
– $
sort
-‐R
/usr/share/dict/words
|
yarr
-‐2
|
awk
'substr($1,length($1),1)
==
substr($2,1,1)'
|
sort
-‐R
|
yarr
-‐4
|
awk
'substr($2,length($2),1)
==
substr($3,1,1)'
|
sort
-‐R
|
yarr
-‐8
|
awk
'substr($4,length($4),1)
==
substr($5,1,1)'
• インチキ
– $
grep
'^s'
/usr/share/dict/words
|
grep
's$'
|
tr
'n'
'
'
2013/12/22
第8回シェル芸勉強会
22