Portál AbcLinuxu, 26. října 2025 20:43
plot 1:($2+$3+...)
#!/bin/bash
# USAGE: mergefuncs FILE...
# Martin Cizek <cizek@webland.cz>
[ $# -gt 0 ] || exit 1;
awk '
function complete_last()
{
for (i = idx; i <= count; i++)
res[i] = res[i] " 0"
idx = 1
have_prev = 0
}
BEGIN {
xi = 0
idx = 1
}
ARGIND < ARGC/2 {
if (length($1))
x[xi++] = (double)$1
next
}
!sorted {
count = asort(x)
sorted = 1
lastind = ARGIND
}
/[^ \t]/{
if (lastind != ARGIND)
complete_last()
lastind = ARGIND
while (idx <= count && x[idx] <= $1) {
if ((have_prev && x[idx] == prev_x) || x[idx] == $1)
res[idx] = res[idx] " " $2
else if (have_prev && x[idx] >= prev_x)
res[idx] = res[idx] " " (prev_y + ($2-prev_y)*(x[idx]-prev_x)/($1-prev_x))
else
res[idx] = res[idx] " 0"
idx++;
}
}
/[^ \t]/&&!have_prev {
have_prev = 1
prev_x = (double)$1
prev_y = (double)$2
}
END {
complete_last()
for (i = 1; i <= count; i++)
print x[i] " " res[i]
}
' "$@" "$@"
join -e 0 -j 1 files...
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.