著者:斉藤 博文
プログラミング言語「AWK」は、データストリーム(データの流れ)を逐次処理するのに適しています。本連載では、電子回路の分野でその特徴を生かし、シェルスクリプトを組み合わせてデジタル信号を処理します。第1回は「デジタルフィルタ」と「リングバッファ」について解説します。
シェルスクリプトマガジン Vol.79は以下のリンク先でご購入できます。![]()
![]()
図14 1~10000の出力データから末尾の10行を取り出すAWKプログラム(tail.awk)
#! /usr/bin/gawk -f
{
lines[NR] = $0;
}
END {
for (i = NR - 9; i <= NR; i++) {
print lines[i];
}
}
図15 リングバッファを用いたAWKプログラム(tail_ring.awk)
#! /usr/bin/gawk -f
BEGIN {
len = 10;
}
{
idx = NR % 10;
buf[idx] = $0;
}
END {
for (i = 9; i >= 0; i--) {
print get_buf(buf, idx - i, len);
}
}
function get_buf(buf, idx, len) {
if (idx < 0) {
return buf[idx + len];
} else {
return buf[idx];
}
}
図17 「get_buf」関数をPythonのプログラムで記述
def get_buf(buf, idx, len):
if (idx < 0):
return buf[idx + len]
else:
return buf[idx]