[Tokyo.pm] one liner

Inaba Hiroto inaba @ st.rim.or.jp
2000年 2月 3日 (木) 09:50:32 CST


稲葉です。

maeda @ src.ricoh.co.jp wrote:

>今日のワンライナー
>
>perl -ne 'sub bold{$x=shift;$x=~s/(.)/$1\b$1/g;$x}  print "$ARGV:$.:$_" if s/(group)/bold($1)/gie; close ARGV if eof(ARGV) ' sql-*.txt | less
>
>sql-*.txtからgroupをさがして、見つかったらファイル名、行番号とと
>もに太字で表示する。

自分ならシェルのforを併用して、

for f in sql-*.txt; do
 perl -ne 'print "'$f':$.:$_" if s/(group)/($x=$1)=~s:(.):$1\b$1:g;$x/gie' $f;
done | less

とします。subを使った方がわかりやすいですが、ワンライナーはわかりやすさより
短さと思うので。

自分もいくつかワンライナーを引っ張り出してきました。

perl -e '@a = <>; print splice @a, rand @a, 1 while @a' file

fileの行をランダムな順に全部出力する。


perl -e 'print "$h{$_} $_\n"
  for sort{$h{$a}<=>$h{$b} or $a cmp $b} grep !$h{$_}++, map /\w+/g, <>' file

fileの単語の出現頻度を数えて順に表示する。
-- 
稲葉 浩人    Inaba Hiroto <inaba @ st.rim.or.jp>



Tokyo-pm メーリングリストの案内