【問題と解答】第21回未経験者大歓迎!誰でも働けるアットホームな職場ですシェル芸勉強会

Pocket
LINEで送る

問題だけのページはこちら

問題で使うファイル等

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

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

にあります。

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

$ 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

ShellGeiData/vol.21/Q1のbba.pdfからテキストを抽出して標準出力に出してください。

解答例

例題のファイルの日本語にはFlateDecodeという圧縮がかかっていますが、これを解凍する一般的なコマンドは見つかりませんでした。ですのでpdf用のコマンドを紹介するだけで・・・。FlateDecodeの解凍コマンドはzlibを使うと自作はできる模様。

###poppler-utilsをインストール###
$ sudo apt-get install poppler-utils
###あとはlessとかpdftotextとか###
$ less bba.pdf | cat
  群馬のシャブばばあ




hoge.txt[2016/02/09 22:30:32]
$ pdftotext -q bba.pdf -
群馬のシャブばばあ

hoge.txt[2016/02/09 22:30:32]

Q2

次のデータはShift JIS(cp932)の固定長データです。

$ cat anydata.cp932 
00000001??ӹ޷?ݺ?*******214413051100000002ʰ????ݸ*********114413018800000003???ӷ?ݺ?********210413093100000004??ݷ?ݺ?*********234413000800000005???ް??׳??޷?ݺ?331413090000000006??Э????ݾ޲??ݺ?1234130981

次のようなUTF-8のテキストに変換してください。

00000001ハナモゲギンコウ*******2144130511
00000002ハードバンク*********1144130188
00000003コドモギンコウ********2104130931
00000004ハタンギンコウ*********2344130008
00000005アンダーグラウンドギンコウ3314130900
00000006バミューダメンゼイギンコウ1234130981


解答

###Shift JISの半角は1バイトなのでUTF-8に変換する前に折り返すと楽です。###
$ cat anydata.cp932 | fold -b35 | nkf -wLux
00000001ハナモゲギンコウ*******2144130511
00000002ハードバンク*********1144130188
00000003コドモギンコウ********2104130931
00000004ハタンギンコウ*********2344130008
00000005アンダーグラウンドギンコウ3314130900
00000006バミューダメンゼイギンコウ1234130981

###1行の長さを調べるときは仕様書を見るか、規則性を見つけて折り返して長さを調べる###
$ cat anydata.cp932 | sed 's/[0-9]\{10\}/&\n/g' |
 LANG=C awk '{print length($0)}'
35
35
35
35
35
35
1
1

Q3

2016年の日曜日を全て列挙してください。

解答

GNU dateの-fを使うと楽です。

$ seq 20160101 20161231 | date -f - 2> /dev/null | grep 日曜日
2016年  1月  3日 日曜日 00:00:00 JST
2016年  1月 10日 日曜日 00:00:00 JST
2016年  1月 17日 日曜日 00:00:00 JST
...
2016年 12月 18日 日曜日 00:00:00 JST
2016年 12月 25日 日曜日 00:00:00 JST
###Tsukubaiを使う例###
$ mdate -e 20160101 20161231 | tr ' ' '\n' | yobi 1 | awk '$2==0'
20160103 0
20160110 0
20160117 0
...
20161218 0
20161225 0

Q4

次のデータファイル

001 あみだばばあ
002 砂かけばばあ
003 ******
004 尾崎んちのババア

に、次の新しいデータ

002 *******
003 群馬のシャブばばあ
005 純愛ババア学園

を反映して

001 あみだばばあ
002 *******
003 群馬のシャブばばあ
004 尾崎んちのババア
005 純愛ババア学園

というデータを出力してください。

解答

$ sort -ms -k1,1 newdata data | uniq -w 3
001 あみだばばあ
002 *******
003 群馬のシャブばばあ
004 尾崎んちのババア
005 純愛ババア学園

Q5

GitHubのvol.21/Q5にある次の二つのシェルスクリプトのデバッグをしてください。

$ cat ./a.bash 
#!/bin/bash

echo Hell
###実行すると変なバグ###
$ ./a.bash 
./a.bash: 行 1: #!/bin/bash: そのようなファイルやディレクトリはありません
Hell
$ cat b.bash 
#!/bin/bash

ls ˜/
###ホームディレクトリが表示されない###
$ ./b.bash 
ls: ˜/ にアクセスできません: そのようなファイルやディレクトリはありません

解答

a.bashについては「BOM付きUTF-8」という凶悪なフォーマットなので発見はバイナリの理解が大きな助けになります。が、とりあえずnkfに通せばBOMは取れます。たまにWindowsからやってきます。

###調べるとUTF-8と出るので発見が遅れる。###
$ nkf -g a.bash 
UTF-8
###xxdで見ると頭に変なバイト列。###
$ xxd -ps a.bash 
efbbbf23212f62696e2f626173680a0a6563686f2048656c6c0a
###ただし、見なくてもnkfで除去できる。###
$ nkf -wLux a.bash > a
$ chmod +x a
$ ./a
Hell

b.bashは、チルダがUTF-8のマルチバイト文字になっていて、~/がホームディレクトリに変換されません。このスクリプトには他にマルチバイト文字がないので、次のようなワンライナーでチルダがおかしいことを発見できます。

$ iconv -c -f utf-8 -t ascii b.bash | diff - b.bash 
3c3
< ls /
---
> ls ˜/

Q6

次の拡張正規表現をワンライナーで基本正規表現に変換してください。括弧の中の数字は数字の回数の文字列の繰り返しに展開してください。

$ cat extended 
a+h{5}(ho){10}[0-9]+

解答

ゴリゴリです。

$ cat extended | sed 's/[+}]/&\n/g' | sed 's/\(.*\)+/\1\1*/' |
 tr '{}()' '    ' |
 awk 'NF==2{for(i=1;i<=$2;i++){printf $1};print ""}NF==1' |
 tr -d '\n' | xargs
aa*hhhhhhohohohohohohohohoho[0-9][0-9]*

Q7

GitHubのvol.21/Q7にあるテキストについて、各段落の文字数を数えてください。

解答

改行をとって数える対象を1行にまとめる方針が簡単です。解答例はロケールが日本語で、awkがgawkである等、いろいろ制約がありますが・・・。

$ cat text | tr -d '\n' | sed 's/ /\n/g' |
 awk '{print length($1),$1}'
0 
15 恥の多い生涯を送って来ました。
353 自分には、人間の生活というものが、...にわかに興が覚めました。
103 また、自分は子供の頃、...とばかり思っていました。

Q8

GitHubのvol.21/Q8にある1350369599.Vfc03I4682c8M940114.remoteから添付ファイルを抽出して画像を復元してください。二つありますが別々に処理して構いません。

解答

まず、何行目から何行目までがデータなのか調べます。

$ grep -n -C 1 -- -- 1350369599.Vfc03I4682c8M940114.remote 
(略)
59:--047d7b621ee6cf83c604cc276bb3
60-Content-Type: image/jpeg; name="CHINJYU.JPG"
--
665-0000000000000000000000000000001//9k=
666:--047d7b621ee6cf83c604cc276bb3
667-Content-Type: image/jpeg; name="IMG_0965.JPG"
--
77341-xk9On61jS6VNFJqFxdoIZYbWK6QALsnJbBjHYcc4GT2IHJrGhUevkZ1MNypPuf/Z
77342:--047d7b621ee6cf83c604cc276bb3--

で、その範囲を抽出して変換します。一つめの画像の切り出しの例だけ示しておきます。

###出力の範囲を見ながらデータを切り出す###
$ sed -n '60,665p' 1350369599.Vfc03I4682c8M940114.remote |
 sed -n '6,$p' | base64 -d > a.jpg
###ImageMagickのidentifyコマンドでちゃんと画像になっているか確認###
ueda@remote:~/GIT/ShellGeiData/vol.21/Q5$ identify a.jpg 
a.jpg JPEG 261x261 261x261+0+0 8-bit DirectClass 34.2KB 0.010u 0:00.019
###さらにavplayで画像を見る###
$ avplay a.jpg

Pocket
LINEで送る

【問題のみ】第21回未経験者大歓迎!誰でも働けるアットホームな職場ですシェル芸勉強会

Pocket
LINEで送る

解答はこちら。

問題で使うファイル等

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

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

にあります。

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

$ 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

ShellGeiData/vol.21/Q1のbba.pdfからテキストを抽出して標準出力に出してください。

Q2

次のデータはShift JIS(cp932)の固定長データです。

$ cat anydata.cp932 
00000001??ӹ޷?ݺ?*******214413051100000002ʰ????ݸ*********114413018800000003???ӷ?ݺ?********210413093100000004??ݷ?ݺ?*********234413000800000005???ް??׳??޷?ݺ?331413090000000006??Э????ݾ޲??ݺ?1234130981

次のようなUTF-8のテキストに変換してください。

00000001ハナモゲギンコウ*******2144130511
00000002ハードバンク*********1144130188
00000003コドモギンコウ********2104130931
00000004ハタンギンコウ*********2344130008
00000005アンダーグラウンドギンコウ3314130900
00000006バミューダメンゼイギンコウ1234130981


Q3

2016年の日曜日を全て列挙してください。

Q4

次のデータファイル

001 あみだばばあ
002 砂かけばばあ
003 ******
004 尾崎んちのババア

に、次の新しいデータ

002 *******
003 群馬のシャブばばあ
005 純愛ババア学園

を反映して

001 あみだばばあ
002 *******
003 群馬のシャブばばあ
004 尾崎んちのババア
005 純愛ババア学園

というデータを出力してください。

Q5

GitHubのvol.21/Q5にある次の二つのシェルスクリプトのデバッグをしてください。

$ cat ./a.bash 
#!/bin/bash

echo Hell
###実行すると変なバグ###
$ ./a.bash 
./a.bash: 行 1: #!/bin/bash: そのようなファイルやディレクトリはありません
Hell
$ cat b.bash 
#!/bin/bash

ls ˜/
###ホームディレクトリが表示されない###
$ ./b.bash 
ls: ˜/ にアクセスできません: そのようなファイルやディレクトリはありません

Q6

次の拡張正規表現をワンライナーで基本正規表現に変換してください。括弧の中の数字は数字の回数の文字列の繰り返しに展開してください。

$ cat extended 
a+h{5}(ho){10}[0-9]+

Q7

GitHubのvol.21/Q7にあるテキストについて、各段落の文字数を数えてください。

Q8

GitHubのvol.21/Q8にある1350369599.Vfc03I4682c8M940114.remoteから添付ファイルを抽出して画像を復元してください。二つありますが別々に処理して構いません。

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回のワンライナーで両方探すこととします。

解答

$ grep ^ * | sed 's/-[0-9]*:/ /' | sort -k1,1 -k2,2nr |
awk '{print $2,$1}' | uniq -f 1
233333 file_A
9912 file_B

Q2

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

解答

$ curl -s http://ja.uncyclopedia.info/wiki/%E3%82%B7%E3%82%A7%E3%83%AB%E8%8A%B8 |
grep eval | sed 's/^..//' | bash

Q3

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

$ cat Q3
1
4
2
9
5
8

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

1 8
5 4
9 2

解答

$ paste <(awk '$1%2' Q3 | sort) <(awk '$1%2==0' Q3 | sort -r) | tr '\t' ' '
1 8
5 4
9 2
$ cat Q3 | sed 's/.*[02468]$/-&/' | sort | xargs |
awk '{for(i=NF/2;i>=1;i--){print $(NF-i+1),-$i}}'
1 8
5 4
9 2

Q4

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

解答

もっと楽な方法がありそうですが・・・。ttyコマンドはオプションに$()で埋め込んでもうまく働きません。(ttyが端末と関係ないプロセスで立ち上がるので)。

ueda@remote:~$ a=$(tty | sed 's;/dev/;;') ; ps aux |
awk '$7~/pts\/[0-9]*/' | awk -v "t=$a" '$7!=t' |
awk '{print $2}' | xargs sudo kill 

Q5

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

解答

ueda@remote:~$ echo 45 126 |
awk '{while($1*$2!=0){if($1>$2){$1=$1-$2}else{$2=$2-$1}print}}' |
awk 'END{print $1}'
9
###Tukubai使用(こっちの方が長いが・・・)###
ueda@remote:~$ echo 60 9 | factor | tarr num=1 | tr -d : | 
self 2 1 | sort | count 1 2 | self 1 3 | yarr num=1 |
awk 'NF>2' | awk '{print $1,$2<$3?$2:$3}' |
awk 'BEGIN{a=1}{a*=$1**$2}END{print a}'

Q6

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

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

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

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

解答

$ cat Q6 | sed 's/ / /g' | awk '{for(i=1;i<=NF;i++){print $i,NR,i}}' |
sort -k1,2 | awk '{print $1,$3}' | xargs -n 4 | awk '{print $1,$2,$4}'
吉田 3 1
山田 1 4
上田 2 3
武田 4 2

Q7

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

解答

あくまで一例で一部分ですが・・・

$ seq 39770 40058 | xargs printf "&#x%x;" | nkf --numchar-input 

Q8

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

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

解答

$ cat Q8 | sed 'y/一二三四五六七八九/123456789/' |
nkf -Z1 | sed 's/十/1*10+/' | sed 's/百/1*100+/' |
sed 's/千/1*1000+/' | sed 's/万/1*10000+/' |
sed 's/\([0-9]\)1/\1/g' | bc
5735
4003
45
96233
11
112

宣伝

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で送る

日記: 昨日のシェル芸勉強会のまとめ等

Pocket
LINEで送る

昨日はシェル芸勉強会で家事をサボったので、カミさんを解放すべく子供二人を連れ出して買い物。メインの買い物は次女が破壊した長女のメガネのフレーム。ラゾーナのZoffで買ったものだったけどラゾーナに同じフレームの在庫がなく、幸いなことに駅の反対側のルフロンのZoffに一つだけあったのでラゾーナとルフロンを往復。ついでにルフロンで長女と次女の服を購入。快適に買い物。しかし次女を数時間だっこしていたので腰痛し。家の洗濯機、本日は一日中回りっぱなしでした。湿気が多く洗濯物が乾きにくく困惑。

だいたいこんな一日であっという間に過ぎましたが、家事の合間にシェル芸勉強会の報告等をウェブ上で行いました。鳥海さんもやりましょう(ご本人に直接言えって話ですが・・・)。

ネット時代は自分で宣伝する時間がかかりますね。しかし、自分でできるので良い時代です。

明日は最終出勤日(意味深)

寝る。

Pocket
LINEで送る

日記(SoftwareDesignとシェル芸勉強会)

Pocket
LINEで送る

書いた。SoftwareDesign8月号

数日前、SoftwareDesign8月号が発売されました。

Haskellを担当して書きましたが、どう考えてもその界隈の方々に叱られるような内容。記事を書くときは誰に向けて書いているのかブレないようにしてますが、今回は本当にHaskellを触ったことのない人に階段の一段目を踏んでもらう(あるいは触るべきではない人が触らないようにする)ことを念頭に、本当に簡単なことで、一番本質的だと自分が考えていることを書きました。もちろん、これは自分が本質的だと思っていることで、他の人はそう思ってないかもしれません。異論のある方とも、初心者にはどう接するべきか、一緒に考えてみたいなあとも思います。

ただ、余計な事もいろいろ書いてしまったかなあと思います。面白がってくれる人もいますが、怒る人もいるでしょう。

シェル芸勉強会やりますよ

こっちは本職なので堂々と。8/29(土)にjusさんと共催でシェル芸勉強会を行います。今回から午前の部を設けました。できれば初心者向けにいろんな方々に講習を担当していただければという考えです。そのうち2日構成にでもしましょうか。オーバーナイトセッション夜の耐久シェル芸勉強会とか。死にますね。死にます。

ICRAとりあえず6ページ埋めた

ICRAというのはイクラではなくて、ロボット関係の国際学会で一番重要なヤツです。平たく言えば、夏の甲子園の世界大会みたいなものです。下手な(最近は下手でなくても)論文はバシバシ落とされます。ただ、国際学会なのでそんなに力んでやるもんでもないので、自分の場合は締め切りだいぶ前にさっさと書いて出して他の仕事をするというのが、20代のときからの習慣です。

復帰後連敗街道まっしぐらですが。通らば。実機実験入れたから通して!

ということでICRAで日曜なのに結構物書きをしていた一日でした。もっと英語が速く書けるようになりたい。というか、まだ往年のスピードが戻っていない。SoftwareDesignの方がいろいろ気持ちに引っかかってますが、評価というのは再び仕事が来るかどうかだけです。自分ではコントロールできません。

寝る。

Pocket
LINEで送る

【問題のみ】第17回ジュンク堂はシェル芸が乗っ取った勉強会

Pocket
LINEで送る

ルール

  • ワンライナーで出されたお題を解きます。
  • 汎用的な解を考えるのは出された問題をとりあえず解いてから。
  • 特にどの環境とは指定しないので各自環境に合わせて読み替えを。ただし今回、AWKだけはGNU Awk 4.0.1を使っていると明記しておきます。
  • 今回のテーマはAWKですが、何で解いても構いません。別にPowerShellだろうがRubyだろうが構いません。ワンライナーじゃないけどエクセル方眼紙でも。

環境

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

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

Q1

次のようなデータを

$ cat data1
a 1
b 4
a 2
a 3
b 5

次のように変換してみましょう。

a 1 2 3
b 4 5

余力のある人は次のようなJSON形式にしてみましょう。

{a:[1,2,3],b:[4,5]}

Q2

以下の数字のファイルから同じレコード(行)があるかないかを調べ、ある場合には何行目と何行目にあるのか出力しましょう。

$ cat data
0.5937836043 0.4644710001
0.3637036697 0.5593602512
0.5655269331 0.6793148112
0.7804610574 0.2905477797
0.3637036697 0.5593602512

Q3

次のJSONのデータについて、aに対応づけられた配列内の数字の合計とbに対応づけられた配列内の数字の合計を求めましょう。

$ cat data
{"a":[1,2,3],"b":[4,5]}

Q4

次のようなIPv6アドレスをechoした後にパイプでコマンドをつなぎ、「::」で省略されているセクションに0を補ってください。

$ echo 2001:db8::9abc

ただし、同じワンライナーが

::1

でも使えるようにしてください。

Pocket
LINEで送る

日記(勉強会の次の日が大変だという中年の主張)

Pocket
LINEで送る

本日はエディターの仕事と昨日のシェル芸勉強会の後始末。

勉強会を主催すると、基本、次の日は自分でTwitterをまとめたり(人任せだと微妙なニュアンスが・・・)、USP友の会のサイトに報告を書いたり(これは他の幹事様に振りたいなああ!!あくまで趣味だと思えるならば、ですが。)と、ウェブに痕跡を残さないといけないので大変です。たぶん、当日の3時間のしゃべりより大変かもしれません。シェル芸自体は小さな取り組みですが、こうやって地味な工作活動でだんだん周知されているのであります。

もしよかったらブックマークおねがいしまっす。あんまり頼むもんでもないですが、けっこう時間をかけているので、お願いしてもいいかなーなどと(虫無視が良い)。

あ・・・ついでに宣伝もしておこう・・・。

寝る。

Pocket
LINEで送る

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

Pocket
LINEで送る

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

始める前に

イントロのスライド

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

Pocket
LINEで送る