【問題のみ】第22回ゴールデンウィークの存在疑惑シェル芸勉強会
Sat Apr 30 13:56:52 JST 2016 (modified: Sun Oct 1 10:50:27 JST 2017)
views: 2577, keywords:CLI,UNIX/Linuxサーバ,シェル芸,シェル芸勉強会 この記事は最終更新日が7年以上前のものです。
イントロのプレゼン資料
問題で使うファイル等
GitHubにあります。ファイルは
https://github.com/ryuichiueda/ShellGeiData/tree/master/vol.22
にあります。
クローンは以下のようにお願いします。
git clone https://github.com/ryuichiueda/ShellGeiData.git $
環境
今回はUbuntu Linuxで解答例を作りましたので、BSD系、Macな方は以下の表をご参考に・・・。
Mac,BSD系 | Linux |
---|---|
gdate | date |
gsed | sed |
tail -r | tac |
gtr | tr |
gfold | fold |
Q1
次のファイルの中身について、「cat <ファイル名>」から初めて、同じワンライナーでそれぞれ中央値を求めてください。データの数が偶数の場合は、中央の二つの値の平均を中央値とします。
ueda@remote:~/GIT/ShellGeiData/vol.22/Q1$ cat a
1
3
4
1
6
6
8
2
ueda@remote:~/GIT/ShellGeiData/vol.22/Q1$ cat b
3.4
13
4242
-4
-5
Q2
次のような出力から初めて、
ueda@remote:~$ echo カレーライス 醤油ラーメン | ...
次のような出力を得てください(表示がずれてますが、「ー」のところで文字列をクロスさせています)。最初のパイプより右側はマルチバイト文字を使わないようにしてみましょう。「ー」が何文字目にあるか等の情報は何でも使って結構です。
カ
レ
醤油ラーメン
ラ
イ ス
Q3
次のデータについて、
ueda@remote:~/GIT/ShellGeiData/vol.22$ cat Q3
aaabbb
bababa
aaabbb
aaabbb
bababa
bbbbba
次のような出力を得てください。
bababa 2 5
aaabbb 1 3 4
bbbbba 6
次に、得られた答えから元のデータを復元してください。Q3の答えはQ3.ansにあります。
Q4
次のファイルについて、素数行目に存在するりんごとみかんをそれぞれ数えてください。できる人は素数の行を2,3,5,7と明示的に指定しないでやってみてください。
ueda@remote:~/GIT/ShellGeiData/vol.22$ cat Q4
りんご
りんご
みかん
みかん
りんご
みかん
りんご りんご
Q5
足して10になる並びを全て見つけてみましょう。
ueda@remote:~/GIT/ShellGeiData/vol.22$ cat Q5
1 3 4 4 2 3 5 6 7 9 1 4
Q6
次のファイルQ6_1のX,Y,Zに、
ueda@remote:~/GIT/ShellGeiData/vol.22$ cat Q6_1
Z」というものにだって、
所謂いわゆる「
もっと何か表情なり印象なりがあるものだろうに、YのからだにXでもくっつけたなら、
こんな感じのものになるであろうか、
とにかく、どこという事なく、見る者をして、
ぞっとさせ、いやな気持にさせるのだ。
私はこれまで、こんな不思議な男の顔を見た事が、 やはり、いちども無かった。
Q6_2に書いてある文字列を当てはめてください。
ueda@remote:~/GIT/ShellGeiData/vol.22$ cat Q6_2
X 駄馬の首
Y 人間
Z 死相
Q7
明示的に端末を閉じたりシェルを終わらせるためのコマンド(shutdown, reboot, exit, logout等)以外で端末を閉じてみてください。
Q8
次のC++のコードに関数プロトタイプをくっつけてください。
ueda@remote:~/GIT/ShellGeiData/vol.22$ cat Q8.cc
#include <iostream>
#include <string>
using namespace std;
void aho(void)
{
cout << nazo() << endl;
}
string nazo(void)
{
return "謎";
}
int main(int argc, char const* argv[])
{
aho();
return 0; }
つまりこういう出力を作ります。
ueda@remote:~/GIT/ShellGeiData/vol.22$ cat Q8.ans.cc
#include <iostream>
#include <string>
using namespace std;
void aho(void);
string nazo(void);
void aho(void)
{
cout << nazo() << endl;
}
string nazo(void)
{
return "謎";
}
int main(int argc, char const* argv[])
{
aho();
return 0; }