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