Just another Ruby porter,

〜2015年4月上旬〜


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

2015-04-01 (Wed)

マウスの充電率が常に70%

あれからcrontabでマウスの充電率をデイリーで取っていたわけだけど、
70%のまま変化がないのであった。なんだよ。飾りか。

% awk '{print $NF}' ~/etc/mouse.txt | uniq
70%

2015-04-02 (Thu)

VirtualBoxのシームレスモード

こんな便利なモードがあるとは今まで気づかなかった。
使えるようにするにはGuest Additionsか、
もしくはvirtualbox-guest-dkmsパッケージを入れる必要あり。
メニューのビューからシームレスモードへ移行できる。


2015-04-03 (Fri)

05. n-gram

sedを使えば結構簡単だった。

% echo 'abcdefghijkl' | sed ':;h;s/\(...\).*/\1/p;g;s/.//;t;d'
abc
bcd
cde
def
efg
fgh
ghi
hij
ijk
jkl

\(.\{3\}\)と書けばわかりやすいか。


2015-04-04 (Sat)

06. 集合 #シェル芸

和集合、積集合、差集合はすべてjoinコマンドで可能。

% bi-gram() { echo "$1" | sed ':;h;s/\(.\{2\}\).*/\1/p;g;s/.//;t;d' | sort -u; }
% bi-gram paraparaparadise        
ad
ap
ar
di
is
pa
ra
se
% bi-gram paragraph        
ag
ap
ar
gr
pa
ph
ra
% join <(bi-gram paraparaparadise) <(bi-gram paragraph)                         
ap
ar
pa
ra
% join -a1 -a2 <(bi-gram paraparaparadise) <(bi-gram paragraph)
ad
ag
ap
ar
di
gr
is
pa
ph
ra
se
% join -v1 <(bi-gram paraparaparadise) <(bi-gram paragraph)
ad
di
is
se
% bi-gram paraparaparadise|grep se               
se
% bi-gram paragraph|grep se

-a1 -a2で和集合、何もつけなければ積集合、-v1で差集合となる。
seが含まれてるかどうかは普通にgrepで。


2015-04-05 (Sun)

ニコ動とかYouTubeで動画が数秒置きに止まる?

最近なんかやたらとニコ動とかYouTubeで動画が数秒置きに止まるなあと思って、
また拡張を無効にしまくっていったらuBlockだった。
ABPより軽いはずなのになぜ?
まあ、サイト毎に無効にできるから問題ないんだけど。


2015-04-06 (Mon)

xargsにメタ文字を渡したい #シェル芸

xargsにとっては"も'も\も特別な意味を持っていて、シェルと同じように処理され消える。
したがって対応していないとエラーになってしまう。

% echo '"a b" c' | xargs
a b c
% echo '"a b c' | xargs 
xargs: ダブルクオートが一致しません。デフォルトでは -O オプションを指定しない限り xargs でクォートは特別な意味を持ちます

man xargsしても-Oなんてオプションはどこにも出てこないからおかしいと思ったら、
実はこのメッセージはバグってて-Oじゃなくて-0が正しい。LANG=Cだと合っている。

% echo '"a b c' | LANG=C xargs
xargs: unmatched double quote; by default quotes are special to xargs unless you use the -0 option

きっと判別しづらいフォントを使っている人が書いたんだろう。

そんな話はどうでもよくて、じゃあそのままの文字を渡したければどうすればいいかというと、
やはりシェルと同じで\でクォートしてあげる必要がある。

% echo '\"a b c' | xargs
"a b c

ちょっと面倒。あとはメッセージにしたがって、-0とか-dで区切りを指定するしかない。

% echo '"a b c' | xargs -d '\n'
"a b c

2015-04-07 (Tue)

09. Typoglycemia #シェル芸

昨日のはこれの伏線だったわけで、無理矢理bashで解いてみた。

xargs -n1 -d ' ' | while read s; do
if [[ $s =~ ^(.)(.{3,})(.)$ ]]; then
    echo "${BASH_REMATCH[1]}"`echo ${BASH_REMATCH[2]} | grep -o . | shuf | paste -sd ""`"${BASH_REMATCH[3]}"
  else
    echo $s
  fi
done | paste -sd ' '

これを09.shと名付け、実行してみる。

% echo "I couldn't believe that I could actually understand what I was reading : the phenomenal power of the human mind ." | bash 09.sh
I cld'onut blveiee that I cloud atlulcay utneasdnrd what I was rnaeidg : the ponenhmael pweor of the human mind .

このcouldn'tが曲者で-d ' 'を指定しないとエラーになってしまう。
まあ、xargsを使わなくても、tr ' ' '\n'で十分なんだけど。


2015-04-08 (Wed)

10. 行数カウント #シェル芸

第2章はUNIXコマンドと同じ挙動をする処理を書けという話で、確認方法も記載されている。
ということはつまりシェル芸的にはそれ以外の方法で実現すると解釈しよう。
行数のカウントはすでに 先月やったのでまた別な方法を考える。

% < hightemp.txt wc -l  
24
% < hightemp.txt jq -sR './"\n"|length'
24
% < hightemp.txt ruby -ne 'END{p $.}'  
24
% < hightemp.txt perl -nE 'END{say $.}'
24
% < hightemp.txt tr -cd '\n' | uniq -c | tr -cd '0-9\n'
24

2015-04-09 (Thu)

11. タブをスペースに置換 #シェル芸

sedとtrを封印されたが、awkでもrubyでもperlでもいける。

% ruby -pe 'gsub(/\t/, " ")' hightemp.txt
% awk '{gsub(/\t/, " ")}1' hightemp.txt
% perl -pe 'y/\t/ /' hightemp.txt

ああ、こんな方法もあるな。

% sh -c 'while read a;do echo $a;done' < hightemp.txt
% awk '$1=$1' hightemp.txt

joinはかなり無理がある。これぐらいだとなぜかsortしなくてもjoinは文句言わない。

% join -o 1.1,1.2,1.3,1.4 hightemp.txt hightemp.txt

2015-04-10 (Fri)

12. 1列目をcol1.txtに,2列目をcol2.txtに保存 #シェル芸

awkだと簡単。

% awk '{print $1 > "col1.txt"; print $2 > "col2.txt"}' hightemp.txt
% cut -f1 hightemp.txt | diff - col1.txt                             
% cut -f2 hightemp.txt | diff - col2.txt                           

あとむりやりjoinで。

% join -o 0 hightemp.txt hightemp.txt > col1.txt
% join -o 1.2 hightemp.txt hightemp.txt > col2.txt

<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!