私は、処理を外部ツールに委譲するほうがよいでしょう。例えば、このgawk
スクリプト:
BEGIN{
#mat_id = 2
#m = 2
#n = 3
mat_size = m * n
row_lb = ((mat_id-1) * mat_size) + 1
row_ub = row_lb + mat_size - 1
curr_row = 0
}
NR >= row_lb && NR <= row_ub{
col_id = (NR - row_lb) % n
c = (col_id == (n-1))?"\n":" "
printf "%d%s", $1, c
}
は三つの変数受け入れ:mat_id
は、ファイル内の行列の1から始まるインデックス、m
は、行の数を示しており、n
は、列の数を表します。だから、データファイルtest.dat
などで、たとえば:
1
2
3
4
5
6
10
20
30
40
50
60
コール
gawk -v mat_id=2 -v m=2 -v n=3 -f filter.awk test.dat
はgnuplotのでは確かに
10 20 30
40 50 60
もたらし、あなたがコマンドにこれをラップすることができます(gawkのことを想定スクリプトはGnuplotが呼び出されたのと同じディレクトリにあります):
getMatrix(fName, matId, m, n) = \
sprintf("<gawk -v mat_id=%d -v m=%d -v n=%d -f filter.awk %s", matId, m, n, fName)
plot getMatrix('test.dat', 2, 2, 3) ... [ rest of the plot command] ...