More Related Content Similar to 「はじめよう、シェル芸」オープンキャンプin南島原2020/OpenCamp in Minami-shimabara online (15) 「はじめよう、シェル芸」オープンキャンプin南島原2020/OpenCamp in Minami-shimabara online32. ASCIIコードを利用する
0 1 2 3 4 5 6 7
0 NUL DLE SP 0 @ P ` p
1 SOH DC1 ! 1 A Q a q
2 STX DC2 “ 2 B R b r
3 ETX DC3 # 3 C S c s
4 EOT DC4 $ 4 D T d t
5 ENQ NAK % 5 E U e u
6 ACK SYN & 6 F V f v
7 BEL ETB ‘ 7 G W g w
8 BS CAN ( 8 H X h x
9 HT EM ) 9 I Y i y
A LF SUB * : J Z j z
B VT ESC + ; K [ k {
C FF FS , < L l |
D CR GS - = M ] m }
E SO RS . > N ^ n ~
F SI US / ? O _ o DEL
44. うねうね、うねうね…
これは Python の Turtle Graphics ライブラリによる描画機能で
用いるスクリプトをシェル芸で生成するものです。再帰的に実行
される回数をもとにサイズや角度が自動調整がおこなわれます。
主に以下の命令を用いています。
位置決め …… setpos(x,y)
方向転換 …… lt(angle) , rt(angle)
直線描画 …… fd(length)
67. 郵便番号簿から始めるデータ抽出
ダウンロードした”42nagasa.zip”を展開すると、
”42NAGASA.CSV”が保存されます。
拡張子が示す通りCSVファイルなので、先頭の数行を表
示してみると…なるほど、文字化けで分かりません。
$ head -n 2 42NAGASA.CSV
42201,"850 ","8500000","Ŷ���","Ŷ��","�� �����Ų�ƹ �ޱ","���
茧","�����s","�ȉ�� f�Ɍ ��ڂ ��Ȃ ꍇ",0,0,0,0,0,0
42201,"850 ","8500922","Ŷ���","Ŷ��","������","���
茧","�����s","������",0,0,0,0,0,0
68. 郵便番号簿から始めるデータ抽出
この文字化けは、ShiftJISでエンコードに由来しますの
で、”nkf”コマンドを通せば、UNIX系の環境でも問題な
く表示できます。
また、ここで使えるのは漢字住所のうち8番目(市町村)・
9番目(以降の住所)であることもわかります。
$ head -n 1 42NAGASA.CSV | nkf
42201,"850 ","8500000","ナガサキケン","ナガサキシ","イカニケイサイガナ
イバアイ","長崎県","長崎市","以下に掲載がない場合",0,0,0,0,0,0
42201,"850 ","8500922","ナガサキケン","ナガサキシ","アイオイマチ","長
崎県","長崎市","相生町",0,0,0,0,0,0
77. 逆向きアスキーアートを作る
空白を"@”に、”\”を"$”
に変換します(崩れ対策)。
行頭にフラグ(“#”(l.1~
3)、”%”(l.4~11))を付加
します。
$ cowsay -f cower.cow "南島原オープンキャンプ2020オンライン" | sed -e
's//$/g;s/ /@/g' -e '1 s/$/@/;3 s/$/@/;1,3 s/^/#/;4,11 s/^/%/'
#@______________________________________@
#<@南島原オープンキャンプ2020オンライン@>
#@--------------------------------------@
%@@@@@$
%@@@@@@$
%@@@@@@@@,__,@|@@@@|@
%@@@@@@@@(oo)$|@@@@|___
%@@@@@@@@(__)$|@@@@|@@@)$_
%@@@@@@@@@@@@@|@@@@|_w@|@@$
%@@@@@@@@@@@@@|@@@@|@@||@@@*
%
@@@@@@@@@@@@@Cower....
78. 逆向きアスキーアートを作る
アスキーアートの幅に合わ
せたときに空白になる箇所
も、"@”で埋めて行の長さ
を調整し、反転に備えま
す。
$ cowsay -f cower.cow "南島原オープンキャンプ2020オンライン" | sed -e
's//$/g;s/ /@/g' -e '1 s/$/@/;3 s/$/@/;1,3 s/^/#/;4,11 s/^/%/' | while
read line;do [[ $line =~ ^# ]] && line=$(printf "%30sn" $line|sed -e
'y/ /@/'); line=$(printf "%-30sn" $line |sed -e 'y/ /@/');echo $line;
done)
#@______________________________________@
#<@南島原オープンキャンプ2020オンライン@>
#@--------------------------------------@
%@@@@@$@@@@@@@@@@@@@@@@@@@@@@@
%@@@@@@$@@@@@@@@@@@@@@@@@@@@@@
%@@@@@@@@,__,@|@@@@|@@@@@@@@@@
%@@@@@@@@(oo)$|@@@@|___@@@@@@@
%@@@@@@@@(__)$|@@@@|@@@)$_@@@@
%@@@@@@@@@@@@@|@@@@|_w@|@@$@@@
%@@@@@@@@@@@@@|@@@@|@@||@@@*@@
%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@Cower....@@@@@@@@
79. 逆向きアスキーアートを作る
”%”が先頭にある行(l.4~
11)を”rev”で反転しなが
ら出力します。
cowsay -f cower.cow "南島原オープンキャンプ2020オンライン" | sed -e
's//$/g;s/ /@/g' -e '1 s/$/@/;3 s/$/@/;1,3 s/^/#/;4,11 s/^/%/' | while
read line;do [[ $line =~ ^# ]] && line=$(printf "%30sn" $line|sed -e
'y/ /@/'); line=$(printf "%-30sn" $line |sed -e 'y/ /@/');[[ $line =~ ^
% ]] && echo $line|rev ||echo $line; done
#@______________________________________@
#<@南島原オープンキャンプ2020オンライン@>
#@--------------------------------------@
@@@@@@@@@@@@@@@@@@@@@@@$@@@@@%
@@@@@@@@@@@@@@@@@@@@@@$@@@@@@%
@@@@@@@@@@|@@@@|@,__,@@@@@@@@%
@@@@@@@___|@@@@|$)oo(@@@@@@@@%
@@@@_$)@@@|@@@@|$)__(@@@@@@@@%
@@@$@@|@w_|@@@@|@@@@@@@@@@@@@%
@@*@@@||@@|@@@@|@@@@@@@@@@@@@%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%
@@@@@@@@@@@@@Cower....@@@@@@@@
80. 逆向きアスキーアートを作る
逆向きにしたときに変にな
る文字、型崩れ防止のため
に一時的に置き換えた文字
を元に戻して完成です。
(cowsay -f cower.cow "南島原オープンキャンプ2020オンライン" | sed -e
's//$/g;s/ /@/g' -e '1 s/$/@/;3 s/$/@/;1,3 s/^/#/;4,11 s/^/%/' | while
read line; do [[ $line =~ ^# ]] && line=$(printf "%30sn" $line | sed -e
'y/ /@/'); line=$(printf "%-30sn" $line | sed -e 'y/ /@/'); [[ $line =~
^% ]] && echo $line | rev || echo $line; done) | sed -e 'y/$@()// )(/;s/%
$//g;s/#/ /'
______________________________________
< 南島原オープンキャンプ2020オンライン >
--------------------------------------
/
/
| | ,__,
___| |/(oo)
_/( | |/(__)
/ | w_| |
* || | |
Cower....