Just another Ruby porter,


8月下旬の日記 | RDF

2016-08-27 (Sat)

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

【問題のみ】第24回◯◯o◯裏番組シェル芸勉強会 – 上田ブログ
8月だから暑いと思い、出掛けるのが面倒という理由で申し込まなかったら、
8月とは思えないほど涼しい日となった。

_ Q1 玉子と卵の数:

これのキモは連想配列の初期化にある。
もともとのawkだと配列はdeleteできないが、gawkやmawkだといける。

% cat Q1 | gawk '{for(i=1;i<=NF;i++)a[$i]++;for(k in a)printf "%s ", k":"a[k];print "";delete a}'
玉子:5 卵:1 
玉子:3 卵:3 
玉子:4 卵:2 
玉子:1 卵:5 
玉子:2 卵:1 

mawkはdelete(a)とは書けない。

gsubは置換した数を返すので、数えるのにも使える。

% cat Q1 | awk '{print "玉子:" gsub("玉子",""), "卵:" gsub("卵","")}' 
玉子:5 卵:1
玉子:3 卵:3
玉子:4 卵:2
玉子:1 卵:5
玉子:2 卵:1

まあ、これでいいのかもしれない。

同じことをRubyで。

% cat Q1 | ruby -lne 'print "玉子:", $_.count("玉"), " 卵:", $_.count("卵")'  
玉子:5 卵:1
玉子:3 卵:3
玉子:4 卵:2
玉子:1 卵:5
玉子:2 卵:1

count("玉子")としてしまうと、"玉"と"子"の数の合計になるので2倍になってしまう。

そういう方針だとこれでもいいのか。

% cat Q1 | while read a;do echo 玉子:$(echo $a|grep -o .|grep -c 玉) 卵:$(echo $a|grep -o .|grep -c 卵);done
玉子:5 卵:1
玉子:3 卵:3
玉子:4 卵:2
玉子:1 卵:5
玉子:2 卵:1

最後に無理矢理uniq -cを使う方法。

% cat Q1 | while read a; do echo $a | grep -o '玉子\|卵' | sort | uniq -c | xargs -n4; done | awk '{print $2 ":" $1, $4 ":" $3}'
% cat Q1 | xargs -L1 sh -c 'echo "$@" | grep -o "玉子\|卵" | sort | uniq -c' - | xargs -n4 | awk '{print $2 ":" $1, $4 ":" $3}'
% cat Q1 | sed 's/.*/echo & | grep -o "玉子\\|卵" | sort | uniq -c/' | sh | xargs -n4 | awk '{print $2 ":" $1, $4 ":" $3}

sedで変換してshに食わせるほうがちょっと短い。


2016-08-11 (Thu)

中旬

台風が多い。


2016-08-01 (Mon)

上旬

つながらなくなるので、フィラーを入れる。


2016-07-21 (Thu)

日記

毎日書くのをやめる。


2016-07-14 (Thu)

DockerfileでWORKDIR

WORKDIRを設定する前にディレクトリを作っておく必要はない。
CPも同様でディレクトリが存在しなければ勝手に作ってくれる。


8月下旬の日記 | RDF


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

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