エントリ数を数える

ファイルが何行あるか知りたいだけなら、いちいちテキストファイルをWordで開いて文字カウントツールを使うまでもありません。そのファイルをfile.txtとするとコマンドラインでは [shell] wc -l file.txt [/shell] で良くて、文字数とかバイト数も合わせて知りたい時には [shell] wc file.txt [/shell] で知ることができます。

また、出現する文字の種類が何種類あるか知りたいだけならsortとuniqコマンドを使って [shell] sort file.txt | uniq | wc -l [/shell] すれば良い(ただし、この場合は一行に一単語というファイルの中身の前提条件があって、だが)。バイオインフォマティクスな業界ではそれが何回出てきたかが気になる状況が多々あります。そういう需要に対応するために以下の様な簡単なPerlスクリプト(count.prl)を2010年代の今になっても頻繁に利用しています。 [perl] while(<>) { my($word) = split; $num{$word}++; } foreach (sort keys %num) { print "$t$num{$}n"; } [/perl] 出現頻度が多かった順に見たい時にはsortコマンドと併せて以下の様な感じで。 [shell] perl count.prl | sort -k2 -n -r | less [/shell] sortのオプション-k2は二番目のフィールドをソート対象に、-nで文字列ではなく数値データとして扱う、-rで逆順(すなわち、大きなものから小さいもの順に並べる)、という意味です。

この技が必要となる状況は無数に存在するので、是非sortのオプションを [shell] man sort [/shell] や [shell] sort --help [/shell] するなどしていろいろ調べて自分のものにして使いこなして下さい。某ExcelやWordのカウント機能より絶対便利ですから。


Written by bonohu in misc on 月 01 7月 2013.