シェル スクリプトはパイプを使用できます。
cat "$@" |
tr -cs "a-zA-Z0-9." '\012' |
{
old="aaa."
while read new
do
case "$old" in
*.) : OK;;
*) echo "$old $new";;
esac
old="$new"
done
}
このコードはcat
、データのユニバーサル コレクターとして使用しtr
ます。これは、ファイル名の引数を一切受け入れない純粋なフィルターです。基本的な考え方は、変数 old には最初の単語が含まれ、new は新しい単語を読み取るというものです。old がピリオドで終わる場合 (最初の場合のように)、ルールの下では有効なバイグラムを形成しません。文末のバイグラムからドットを削除する場合は、次を使用できます。
echo "$old ${new%.}"
飾られていないバージョン (ドットがエコーされている) は、Bourne シェルと派生シェルで動作します。${new%.}
オリジナルの Bourne シェルではなく、Korn シェルとその派生物を使用する唯一のワーカーを含むバージョン。
一時ファイルを使用する必要がある場合は、それらの名前にプロセス ID ($$) が含まれるようにし、trap を使用してそれらを削除します。
tmp=${TMPDIR:-/tmp}/bigram.$$
trap 'rm -f $tmp.?; exit 1' 0 1 2 3 13 15
...code using $tmp.1, $tmp.2, etc...
rm -f $tmp.?
trap 0
シグナル 1 はハングアップ (HUP)、2 は割り込み (INT)、3 は終了 (QUIT)、13 はパイプ (PIPE)、15 は終了 (TERM) です。0 は「任意の出口」であり、このコンテキストではほぼ juju です。実際に終了する前に、示されているように終了トラップをキャンセルすることを忘れないでください。