【問題のみ】第24回◯◯o◯裏番組シェル芸勉強会

Pocket
LINEで送る

解答はこちら

イントロ

問題で使うファイル等

GitHubにあります。ファイルは

https://github.com/ryuichiueda/ShellGeiData/tree/master/vol.24

にあります。

クローンは以下のようにお願いします。

$ git clone https://github.com/ryuichiueda/ShellGeiData.git

環境

今回はUbuntu Linux 16.04で解答例を作りました。

Q1

$ cat Q1
玉子 卵 玉子 玉子 玉子 玉子
玉子 玉子 卵 卵 卵 玉子
卵 玉子 卵 玉子 玉子 玉子
卵 玉子 卵 卵 卵 卵
玉子 卵 玉子

上のようなQ1ファイルについて、次のような出力を得てください。

玉子:5 卵:1 
玉子:3 卵:3 
玉子:4 卵:2 
玉子:1 卵:5 
玉子:2 卵:1 

Q2

次のようなテキストについて、繰り返し出てきた文字の2つ目以降を省いて出力してください。例えばQ2のファイル

$ cat Q2
へのへのもへじ

の場合、「へのもじ」が正解の出力になります。

Q3

$ cat Q3
金 日成
キム ワイプ
金 正日
キム タオル
金 正男

というデータを、

%%
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
%%

というように第一フィールドをキーにして%%でレコードを区切ってください。awkを使ってできた人は、awkを使わないでやってみてください。

Q4

Q4.xlsxのA1のセルには数字が書いてあります。その数字を出力してください。A4には文字列が書いてあるので余裕がある人はそれも特定してみましょう。

Q5

ファイルQ5について、xに好きな数を代入して各行の式を計算してください。

$ cat Q5
x + x^2
x + 1/x
x*x*x

余裕のある人は、例えばxに2を代入したければ、

$ echo 2 | ...

というようにecho <代入したい数>から始めてワンライナーで解いてみてください。

Q6

「玉子」と「卵」の数を数えて、数が少ない方を数が大きい方で置換してください。

$ cat Q6 
卵卵玉子玉子玉子玉子玉子卵卵卵玉子玉子卵玉子玉子玉子玉子卵卵玉子卵玉子卵卵玉子卵玉子

Q7

次のseq(あるいはjot等)の出力から、各桁の数字の構成が同じもの(例: 11122と22111等)を重複とみなし、除去してください。

$ seq -w 00000 99999

Q8

1. まず、1〜7を全て含む7桁の整数を全て列挙して、tmpというファイルに出力してください。

2. 次に、相異なる7以下の正の整数a,b,c,d,e,f,gを用いて、

abcd + efg

と表せる素数と、その時のa〜gの数字を全て求めましょう。tmpを用いて構いません。

(参考: 2011年日本数学オリンピック予選第3問から。一部改。http://www.imojp.org/challenge/old/jmo21yq.html

Pocket
LINEで送る

【問題のみ】第20回記念、年末年始の浮ついた気分大粉砕シェル芸勉強会

Pocket
LINEで送る

解答例はコチラ

イントロ

問題で使うファイル等

前回からGitHubに置くようにしました。ファイルは

https://github.com/ryuichiueda/ShellGeiData/tree/master/vol.20

にあります。

クローンは以下のようにお願いします。

$ git clone https://github.com/ryuichiueda/ShellGeiData.git

環境

今回はLinuxで解答例を作りましたので、BSD系、Macな方は以下の表をご参考に・・・。

Mac,BSD系 Linux
gdate date
gsed sed
tail -r tac
gtr tr
gfold fold

Q1

リポジトリ内のvol.20/Q1ディレクトリには次のように数字が書いてあるファイルが4つ入っています。

$ ls 
file_A-1  file_A-2  file_B-1  file_B-2
$ head -n 2 *
==> file_A-1 <==
1
31351

==> file_A-2 <==
11
35

==> file_B-1 <==
-32
12

==> file_B-2 <==
912
3

file_A-*のグループ、file_B-*のグループからそれぞれ最大の数を探してください。他にfile_C-*、file_D-*、・・・とグループがたくさんあると想定して、1回のワンライナーで両方探すこととします。

Q2

アンサイクロぺディアのシェル芸のページから、「カースト最上位者が日常的に書く、素数を出力するワンライナー」のコードを取得して実行してください。

Q3

次のファイルについて、奇数を1列目、偶数を2列目に振り分けて、奇数の列を昇順、偶数の列を降順にソートしてください。

$ cat Q3
1
4
2
9
5
8

つまりこうしてください。

1 8
5 4
9 2

Q4

今、ログインしているサーバについて、自分の今使っているリモート端末以外の端末を抹殺してください。rootになっても構いません。

Q5

任意の二つの自然数をechoして最大公約数を求めましょう。

Q6

ファイルQ6の中の人の名前について、誰が1列目と2列目の何番めに記述されているかを提示してください。

###スペースは全角###
$ cat Q6
山田 上田 吉田 武田
吉田 武田 上田 山田

解答例は次のようなものです。

吉田 3 1
山田 1 4
上田 2 3
武田 4 2

Q7

一部分に「魚」を持つ漢字をなるべくたくさん列挙してみてください。方法はお任せします。

Q8

次の漢数字をアラビア数字に変換しましょう。

$ cat Q8 
五千七百三十五
四千三
四十五
九万六千二百三十三
十一
百十二

宣伝

Pocket
LINEで送る

【問題と解答】第19回シェル芸3周年記念勉強会

Pocket
LINEで送る

問題のみのページはこちら。

イントロ

問題で使うファイル等

前回からGitHubに置くようにしました。ファイルは

https://github.com/ryuichiueda/ShellGeiData/tree/master/vol.19

にあります。

クローンは以下のようにお願いします。

$ git clone https://github.com/ryuichiueda/ShellGeiData.git

環境

今回はLinuxで解答例を作りましたので、BSD系、Macな方は以下の表をご参考に・・・。

Mac,BSD系 Linux
gdate date
gsed sed
tail -r tac
gtr tr
gfold fold

Q1

端末で実行すると「1ppm」Žと出力されて、シェルスクリプトに書いて実行すると「40ppm」」と出力されるコマンドの組み合わせを考案してみましょう。フォルクスワーゲンは関係ありません。

解答

例えばbashであれば、シェルスクリプトではaliasが無効になることを利用できます。

$ alias hoge='echo 1ppm' && hoge 2> /dev/null || echo 40ppm
1ppm
###シェルスクリプトにすると挙動が変わる###
$ cat a
alias hoge='echo 1ppm' && hoge 2> /dev/null || echo 40ppm
$ ./a
40ppm

Q2

二つの自然数を

$ echo 1 4

というようにechoで出力したあと、

4
3
2
1
2
3
4

というように間の数を埋めてみてください。

解答

$ echo 1 4 | while read a b ; do seq $a $b | tac ; seq $a $b ; done | uniq
4
3
2
1
2
3
4
###whileを使わない例###
$ echo 1 4 | xargs -n 2 seq | xargs | awk '{for(i=NF;i>=1;i--)print $i;print}' | xargs -n 1 | uniq
4
3
2
1
2
3
4
###@ebanさんの答え###
$ echo 1 4 | (read a b; seq $b -1 $a; seq $[a+1] $b)

Q3

「1234567890」を含む13桁の数字(0から始まる数字を含む)をすべて列挙してみましょう。マイナンバー?何それ?

解答

Macだと最初の答えば000や00が0に削られてうまく動かないようです。

$ echo 1234567890{000..999} {0..9}1234567890{00..99}
 {00..99}1234567890{0..9} {000..999}1234567890 | tr ' ' '\n' 
$ seq -w 000 999 | sed 's/./& /g' |
 awk '{a="1234567890"; print $1$2$3a; print $1$2a$3; print $1a$2$3; print a$1$2$3}'
$ seq -w 000 999 |
 awk '{a="1234567890";for(i=0;i<=3;i++)print substr($1,1,i)a substr($1,1+i)}'

Q4

以下のデータについて、「すっとこどっこい」を「朴念仁」に変換しましょう。「すっとこどっこい」以外の部分の改行は除去してはいけません。

$ cat Q4 
この
すっとこどっ
こい
すこっと
どっこい
すっとこすっとこど
っこい
どっこいどっこい
すっとこどっこん
すっ
とこ
どっ
こい

解答

$ cat Q4 | tr '\n' @ |
sed 's/す@*っ@*と@*こ@*ど@*っ@*こ@*い/朴念仁/g' | tr @ '\n' | awk '{print}'
この
朴念仁
すこっと
どっこい
すっとこ朴念仁
どっこいどっこい
すっとこどっこん
朴念仁

Q5

https://blog.ueda.asia/?page_id=7123
から、画像を抜き出して保存しましょう。

解答

$ curl https://blog.ueda.asia/?page_id=7123 |
 grep -o '<img src="data:[^>]*/>' | sed 's/^.*,//' |
 sed 's;"/>$;;' | base64 -d > chinjyu.png

Q6

ファイルQ6は、Shift JISで記録された日本語を2進数にしたものです。ワンライナーで日本語に直してみましょう。

$ cat Q6
1000101001100101100100100110111010000010110010011001000110111101100011101110110110010001101111011001011101101100100000101100100010010011011100011001010010001110100000101010101010010001101101101000110111011101100000101011011110000010111010011000000101000010000011010000101010010011110000011000001011001001100101110100110010010110101111001000001011001000100000101110000010000010110011001000001011001101100101101110110010001011100001011001001101110001100101001000111010000010110001011000001010100000100000101110100110000001010000100000110100001010

解答

一例です。

$ echo -n "obase=16;ibase=2;" | cat - Q6 | sed 's/$/;\n/' |
 bc | tr -d '\\\n' | xxd -r -ps | nkf
各地に多種多様な賭博が存在する。
特に有名なものは野球賭博である。

Q7

bashでは変数SHLVLに、今使っているbashの深さ(子シェル:2, 孫シェル:3, …)が入っています。echo $SHLVLで、100を出してみてください。

解答

自身を呼び出すシェルスクリプトを使って実行するのが一つの方法です。

$ echo 'echo $SHLVL && [ $SHLVL -lt 100 ] && ./a' > a ; chmod +x a ; ./a
###@papironさんの答え###
$ yes 'bash' | head -n 98 | (cat; echo 'echo $SHLVL') | bash

Q8

以下のワンライナーに加筆して、1000プロセスぐらい立ち上げた後で止めてみてください。壊しても良い環境で行ってください。

$ : (){ : | : & }; :

解答

変数を起動するたびにファイルに1行追記してやって条件を判定すれば、安心してください。止まりますよ。(失敗すると止まらないけど。)

###wc -l < aをwc -l aとすると止まらないので注意###
$ : (){ echo a >> a ; [ "$(wc -l < a)" -gt 1000 ] && exit 0; : | : & }; :
Pocket
LINEで送る

【問題】第19回シェル芸3周年記念勉強会

Pocket
LINEで送る

解答はこちら。

イントロ

問題で使うファイル等

前回からGitHubに置くようにしました。ファイルは

https://github.com/ryuichiueda/ShellGeiData/tree/master/vol.19

にあります。

クローンは以下のようにお願いします。

$ git clone https://github.com/ryuichiueda/ShellGeiData.git

環境

今回はLinuxで解答例を作りましたので、BSD系、Macな方は以下の表をご参考に・・・。

Mac,BSD系 Linux
gdate date
gsed sed
tail -r tac
gtr tr
gfold fold

Q1

端末で実行すると「1ppm」Žと出力されて、シェルスクリプトに書いて実行すると「40ppm」」と出力されるコマンドの組み合わせを考案してみましょう。フォルクスワーゲンは関係ありません。

Q2

二つの自然数を

$ echo 1 4

というようにechoで出力したあと、

4
3
2
1
2
3
4

というように間の数を埋めてみてください。

Q3

「1234567890」を含む13桁の数字(0から始まる数字を含む)をすべて列挙してみましょう。マイナンバー?何それ?

Q4

以下のデータについて、「すっとこどっこい」を「朴念仁」に変換しましょう。「すっとこどっこい」以外の部分の改行は除去してはいけません。

$ cat Q4 
この
すっとこどっ
こい
すこっと
どっこい
すっとこすっとこど
っこい
どっこいどっこい
すっとこどっこん
すっ
とこ
どっ
こい

Q5

https://blog.ueda.asia/?page_id=7123
から、画像を抜き出して保存しましょう。

Q6

ファイルQ6は、Shift JISで記録された日本語を2進数にしたものです。ワンライナーで日本語に直してみましょう。

$ cat Q6
1000101001100101100100100110111010000010110010011001000110111101100011101110110110010001101111011001011101101100100000101100100010010011011100011001010010001110100000101010101010010001101101101000110111011101100000101011011110000010111010011000000101000010000011010000101010010011110000011000001011001001100101110100110010010110101111001000001011001000100000101110000010000010110011001000001011001101100101101110110010001011100001011001001101110001100101001000111010000010110001011000001010100000100000101110100110000001010000100000110100001010

Q7

bashでは変数SHLVLに、今使っているbashの深さ(子シェル:2, 孫シェル:3, …)が入っています。echo $SHLVLで、100を出してみてください。

Q8

以下のワンライナーに加筆して、1000プロセスぐらい立ち上げた後で止めてみてください。壊しても良い環境で行ってください。

$ : (){ : | : & }; :
Pocket
LINEで送る

【問題と解答例】第16回春だからログ解析するぞシェル芸勉強会

Pocket
LINEで送る

問題のみのページはコチラ

始める前に

イントロのスライド

続きを読む 【問題と解答例】第16回春だからログ解析するぞシェル芸勉強会

Pocket
LINEで送る

【問題のみ】第16回春だからログ解析するぞシェル芸勉強会

Pocket
LINEで送る

解答はコチラ

始める前に

イントロのスライド

使用するログ

http://blog.ueda.asia/?page_id=5649内の、access.log_.shellshock.gzとaccess_log.nasa.gzです。

続きを読む 【問題のみ】第16回春だからログ解析するぞシェル芸勉強会

Pocket
LINEで送る

イベントの告知でっす(シェル芸勉強会 & 1000Eng)

Pocket
LINEで送る

ある意味死んでいますが、死んでいません。上田です。とあるイベントの打ち合わせ中にちょろっと書いております。内職でしょうか?いいえ、マルチプロセスです。

第9回寒中シェル芸勉強会&第27回バナナで釘が打てますUSP友の会定例会

シェルワンライナーの勉強会です。今回はディレクトリ・ファイル操作のワンライナーを扱います。

1000 Speakers Conference in English 3

英語のスピーチ大会です。お題はなんでも。

景気も若干上向き、消費税対策もあって足が重たいと思いますが、ぜひ息抜き、生活に刺激を与えるために勉強会にお越し下さい。ぜひぜひご登録を。

Pocket
LINEで送る

12月に開催する2つの勉強会について個人でも宣伝しておく

Pocket
LINEで送る

世間ではアベントカレンダーとかいうシャレ乙なものが流行っておりますが,私は肝臓病への暴飲カレンダーが着々と出来上がっております.といってもさすがに会社勤めではなくなったので去年や一昨年よりはマイルドなようで.

単なる忘年会なら気楽なものですが,12月は勉強会の開催という仕事というか祭りが2件入っております.皆様にはぜひお付き合いいただきたく.また,募集は終わりましたが11月末はTechLION vol.15です.今回は有り難い事にゲスト扱いですが,有り難い事にいつものようにスタッフもやります.

続きを読む 12月に開催する2つの勉強会について個人でも宣伝しておく

Pocket
LINEで送る