Just another Ruby porter,

〜2016年10月下旬〜


<Older(,) | Newer(.)> | Recent(/)>> | RDF

2016-10-29 (Sat)

第25回シェル芸勉強会にリモート参加

今回もリモートで参戦。

_ Q1 IPアドレス:

ひねりなし。hostを使う例はなぜかあまり見かけなかった。

% host www.usptomo.com | awk '$0=$NF'  
157.7.203.188

_ Q2 ひらけ!ポンキッキ:

これは練習しすぎてたので、zshとnodeの例を。

% echo ひらけ!ポンキッキ | zsh -c 'read a;a=$a$a;repeat 9 echo $a[++i,i+8]'
ひらけ!ポンキッキ
らけ!ポンキッキひ
け!ポンキッキひら
!ポンキッキひらけ
ポンキッキひらけ!
ンキッキひらけ!ポ
キッキひらけ!ポン
ッキひらけ!ポンキ
キひらけ!ポンキッ
% node -e 'a="ひらけ!ポンキッキ";for(i=0;i<a.length;i++){console.log((a+a).slice(i,i+a.length))}' 
ひらけ!ポンキッキ
らけ!ポンキッキひ
け!ポンキッキひら
!ポンキッキひらけ
ポンキッキひらけ!
ンキッキひらけ!ポ
キッキひらけ!ポン
ッキひらけ!ポンキ
キひらけ!ポンキッ

_ Q3 リダイレクトせずにファイルに保存:

標準入力をファイルに保存するコマンドってあまり見かけない。
それだけリダイレクトが偉大だということか。

% awk '/\/bash$/{print > "hoge"}' /etc/passwd
% grep '/bash$' /etc/passwd | sort -o hoge
% grep '/bash$' /etc/passwd | cp /dev/stdin hoge
% grep '/bash$' /etc/passwd | dd of=hoge
0+1 レコード入力
0+1 レコード出力
32 バイト (32 B) コピーされました、 0.000439506 秒、 72.8 kB/秒

/dev/stdinは忘れがちではあるが、まあ、これが無難か。ddはメッセージがうっとうしい。

_ Q4 すけふぇにんけん:

この問題に限ればsed 'y/すけふ/ずげぶ/'で済む話ではあるが、nkfとか使う方法もあるようで。

$ echo すけふぇにんけん | sed 's/./&゛/g' | nkf -h2 | nkf -Z4 | nkf --hiragana | sed 's/゛//g'
ずげぶぇにんげん

SKKだと半角仮名の濁点が入力できないので全角だけでいける方法を探った。

_ Q5 *を1秒ごとに表示:

whileを禁止されたのでyesを使ってみたが、^Cで死ななくて困る。

% yes | awk '{printf "*";system("sleep 1")}'

^Zしてkill %1で殺した。すなおに

% yes 'echo -n "*";sleep 1' | sh

でよかったようで。これなら^Cで死ぬ。

_ Q6 暗号解読:

最後が0a00という時点で、ああ、little endianでunicodeなんだなと気づく。
あとは力技。printfだとなぜか\u000aを理解してくれないのでbashのechoで。

% echo b730a730eb30b8820a00 | sed 's/\(..\)\(..\)/\\\\u\2\1/g' | xargs bash -c 'echo -ne $1' -
シェル芸

nkfの-W16Lで簡単にいけるらしい。

_ UNIX時刻素数:

jotを使ってみた。

% jot $((60*60*24-1)) $(date +%s -d2016-10-29Z) | factor | awk '$0*!$3{print "@"$2}' | date -uf- +'%F %T'

ZをつければUTCになる。

_ サイン波:

縦横変換。printf二段構え。

% seq 60|awk '{printf "%-20s\n", sprintf("%*s",sin($0/3)*10+10.5,"*")}'|sed 's/./&\t/g'|rs -T -c -g1                
                        * * *                                 * * *                                 * * *              
                      *       *                             *       *                             *       *            
                                                                                                                       
                                *                                                               *                      
                    *                                     *           *                                     *          
                                                                                                                       
                                  *                                                           *                        
                  *                                     *               *                                     *        
                                                                                                                       
                                                                                            *                          
                *                   *                 *                   *                                     *      
                                                                                                                       
*                                                                                                                      
                                      *             *                       *             *                            
              *                                                                                                   *    
  *                                                                                                                    
            *                           *         *                           *         *                           *  
    *                                                                                                                  
          *                               *     *                               *     *                               *
      * *                                   * *                                   * *                                  

OFSをうまく使うとprintfが不要になる。

% seq 60|awk '{$(sin(NR/3)*10+12)="*";$1=$23=""}OFS=" \t"'|rs -T -c -g0 
                                                                                                                       
                        * * *                                 * * *                                 * * *              
                              *                                                                   *                    
                      *                                     *       *                                     *            
                                                                                                                       
                    *           *                         *           *                         *                      
                                                                                                            *          
                                                                                                                       
                                  *                     *               *                     *                        
                  *                                                                                           *        
                                                                                                                       
                                    *                 *                                     *                          
                *                                                         *                                     *      
                                                                                                                       
*                                     *                                                   *                            
              *                                     *                       *                                     *    
                                                                                                                       
  *                                     *         *                           *         *                              
            *                                                                                                       *  
    *                                     *     *                               *     *                                
      * * *                                 * *                                   * *                                 * 

微妙に形が違うが気にしない。


<Older(,) | Newer(.)> | Recent(/)>> | RDF


WWW を検索 jarp.does.notwork.org を検索

わたなべひろふみ
Key fingerprint = C456 1350 085F A320 C6C8 8A36 0F15 9B2E EB12 3885
Valid HTML 4.01!