〜2016年10月下旬〜
今回もリモートで参戦。
ひねりなし。hostを使う例はなぜかあまり見かけなかった。
% host www.usptomo.com | awk '$0=$NF' 157.7.203.188
これは練習しすぎてたので、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))}' ひらけ!ポンキッキ らけ!ポンキッキひ け!ポンキッキひら !ポンキッキひらけ ポンキッキひらけ! ンキッキひらけ!ポ キッキひらけ!ポン ッキひらけ!ポンキ キひらけ!ポンキッ
標準入力をファイルに保存するコマンドってあまり見かけない。
それだけリダイレクトが偉大だということか。
% 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はメッセージがうっとうしい。
この問題に限ればsed 'y/すけふ/ずげぶ/'で済む話ではあるが、nkfとか使う方法もあるようで。
$ echo すけふぇにんけん | sed 's/./&゛/g' | nkf -h2 | nkf -Z4 | nkf --hiragana | sed 's/゛//g' ずげぶぇにんげん
SKKだと半角仮名の濁点が入力できないので全角だけでいける方法を探った。
whileを禁止されたのでyesを使ってみたが、^Cで死ななくて困る。
% yes | awk '{printf "*";system("sleep 1")}'
^Zしてkill %1で殺した。すなおに
% yes 'echo -n "*";sleep 1' | sh
でよかったようで。これなら^Cで死ぬ。
最後が0a00という時点で、ああ、little endianでunicodeなんだなと気づく。
あとは力技。printfだとなぜか\u000aを理解してくれないのでbashのechoで。
% echo b730a730eb30b8820a00 | sed 's/\(..\)\(..\)/\\\\u\2\1/g' | xargs bash -c 'echo -ne $1' - シェル芸
nkfの-W16Lで簡単にいけるらしい。
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 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
微妙に形が違うが気にしない。