Skip to content

Instantly share code, notes, and snippets.

@papiron
Last active December 25, 2017 16:18
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save papiron/0f5df99128adb55434a5eeb5fd883499 to your computer and use it in GitHub Desktop.
うんこチャレンジawk版
シェル芸bot作者さんが作られた、下記うんこチャレンジツイートのawkバージョンだぜ!
140文字に入らなかったのでGistに載せておきましたよ・・・
https://twitter.com/theoldmoon0602/status/945283544682610692
同じような考え方でawk使って実装してみたのがこちら。
```
$ yes う ん こ | awk 'BEGIN{srand()}{i=int(rand()*10)%3+1; print $i}' | awk '{s=$0 s;print $0; if(substr(s,0,3)=="こんう"){exit;}}' | tr -d '\n';echo "つるん";
ううこんんここうううんううこんんうううこんううこんううんうんううんこつるん
```
上記と考え方を変えてみた解答がこちら。
```
$ echo うんこ | grep -o . | awk -v num=inf 'BEGIN{srand()}{a[NR]=$0}END{i=1;while(i<=num){s=a[int(rand()*NR+1)];print s;i++;ss=ss s;if(substr(ss,(length(ss)+1)-3,3) == "うんこ"){exit;}}}' | tr -d '\n'; echo 'つるん';
ううこんんんうこんんんんううんうこうこうこんんうこんこうんんうこんうんこつるん
```
上記の解答例ですが、以前に入力したテキストデータを使って、指定した数だけランダム表示するawkコマンドを作った事があります。
これをヒントに考えてみました。りんご、みかん、なしをランダムに選択して10個出力するawkワンライナー。
```
$ echo -e 'りんご\nみかん\nなし' | awk -v num=10 'BEGIN{srand()}{a[NR]=$0}END{i=1;while(i<=num){s=a[int(rand()*NR+1)];print s;i++;}}'
なし
なし
みかん
なし
りんご
なし
みかん
みかん
なし
みかん
```
ちなみに上記の例ですが、ユニケージ開発手法で利用されるTukubaiコマンドに”ransu"というコマンドがありまして、これに近い動きをするものをawkを使って実装したものになります。
```
$ echo -e 'りんご\nみかん\nなし' | ransu 10
みかん
りんご
みかん
なし
みかん
みかん
みかん
りんご
りんご
みかん
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment