Tôi muốn một cái gì đó như thế này:sử dụng awk hoặc lệnh shell khác bên trong chức năng gnuplot
file1='logs/last/mydata1.log'
file2='logs/last/mydata2.log'
# declare function that uses awk to reshape the data - does not work :(
sum1(fname)=("<awk '{sum=0; for(i=8;i<=NF;i+=2) sum+=$i; print $1,sum/2}' $fname")
sum2(fname)=("<awk '{sum=0; for(i=9;i<=NF;i+=2) sum+=$i; print $1,sum/2}' $fname")
# plot different columns of my file and awk processed file
plot file1 u 1:2 title "thing A measure 1" w l, \
file1 u 3:4 title "thing A measure 2" w l, \
file2 u 1:2 title "thing B measure 1" w l, \
file2 u 3:4 title "thing B measure 2" w l, \
sum1(file1) u 1:2 title "group A measure 1" w l, \
sum2(file1) u 1:2 title "group A measure 2" w l, \
sum1(file2) u 1:2 title "group B measure 1" w l, \
sum2(file2) u 1:2 title "group B measure 2" w l
gì không được làm việc là phần với awk
bên trong một hàm gnuplot. Sử dụng awk
kịch bản của tôi trực tiếp sau khi plot
hoạt động tốt:
plot "<awk '{sum=0; for(i=9;i<=NF;i+=2) sum+=$i; print $1,sum}' ./logs/last/mydata1.log" u 1:2 w l
Có cách nào để đặt awk
hoặc các lệnh shell khác bên trong một hàm gnuplot? Tôi biết tôi có thể thuê ngoài tập lệnh awk sang một tệp khác và awk tệp này trực tiếp sau plot
, nhưng tôi không muốn các tệp riêng biệt.
Hoàn hảo! Bây giờ tôi cũng đã thêm một hàm trợ giúp khác 'exec (cmd, arg1) = (hệ thống (sprintf (cmd, arg1))) ' giúp tôi không phải gõ lại' hệ thống (sprintf()) 'nhiều lần – Juve
Tôi chỉ thấy rằng 'exec' không hoạt động với' plot'. Như bạn đã nói, 'plot' mong đợi một chuỗi, như được tạo bởi đoạn mã thứ hai của bạn. Thx để chỉ ra điều đó. – Juve