これは研究室の講習会のために作ったテキストに加筆訂正したものです。 Unixコマンドを使用例とともに紹介します。
% find ~/Mail -type f | xargs lgrep ゼミ /home/foo/Mail/inbox/1: ゼミの日程を決めたいのですが。 /home/foo/Mail/inbox/4: ゼミの日程が決まりました。
lgrepはgrepの多言語対応版です。 grepにはegrep, fgrepなどの兄弟があります。
% du ~/ | sort -nr | lv 107301 /home/foo 13527 /home/foo/Mail 8097 /home/foo/Mail/2005
screen というプログラムを使います。 ターミナルの中に1つから複数のターミナルを作ることができます。
% ./foo > output.txt
(C-a c 等で別のターミナルへ)
% wc output.txt
7 22 174 output.txt
% tail -f output.txt
aaa
bbb
関連するコマンドに head があります。
#!/bin/sh
for i in 1 2 3 4 5; do
./foo $i > out_$i.txt
done
#!/bin/sh
for i in 1 2 3 4 5; do
output="out_$i.txt"
if [ -f $output ]; then
echo "$output: exists"
else
./foo $i > $output
fi
done
% chmod +x foo.sh % ./foo.sh % ls foo foo.sh* out_1.txt out_2.txt out_3.txt out_4.txt out_5.txt
プログラムを実行して、次のような出力が得られたとする。 どんなパターンが何回出力されたかを集計する。
a b c c a c
#!/usr/local/bin/perl -w
%count = ();
while (<>) {
chomp;
$count{$_}++;
}
@k = sort {$count{$b} <=> $count{$a}} keys(%count);
foreach (@k) {
print "$count{$_} $_\n"
}
% sort output.txt | uniq -c | sort -nr
3 c
2 a
1 b
プログラムを実行して、次のような出力が得られたとする。 各行がパターンと得点だとして、パターンごとに得点を集計する。
a 3 b 1 c 2 c 2 a 1 c 6
#!/usr/local/bin/perl -w
%count = ();
while (<>) {
s/\n//;
@_ = split;
$count{$_[0]} += $_[1];
}
@k = sort {$count{$b} <=> $count{$a}} keys(%count);
foreach (@k) {
print "$count{$_} $_\n"
}
% chmod +x foo.pl % ./foo.pl output.txt 10 c 4 a 1 b
10 c 4 A 1 b
列の入れ替えはこんな感じ。
% awk '{print $2 " " $1}' output.txt
c 10
A 4
b 1
条件文も使える。
% awk '/[a-z]/{print $2 " " $1}' output.txt
c 10
b 1
/DataBase/YOMIURI_EN/E2003.txt の1月1日の記事本文(T2タグ)で 使われている単語を、 頻度順に10単語、出現回数とともに抜き出しなさい。 過去形、複数形などで変化したものは別の単語とみなしてよい。