【问题标题】:Count columns in csv in gnuplot在gnuplot中计算csv中的列
【发布时间】:2012-11-14 04:46:47
【问题描述】:

gnuplot 中是否有一个函数可以返回 csv 文件中的列数? 我在文档中找不到任何内容,也许有人可以为此提出定制功能?

【问题讨论】:

  • 我认为 Gnuplot 没有任何变量可以告诉您这一点。您可以使用this question 的答案作为解决方法。

标签: gnuplot


【解决方案1】:

从 gnuplot4.6 开始,您可以编写一个小脚本来执行此操作。它当然不是最有效的,但它是纯粹的 gnuplot:

#script col_counter.gp
col_count=1
good_data=1
while (good_data){
   stats "$0" u (valid(col_count))
   if ( STATS_max ){
      col_count = col_count+1
   } else {
      col_count = col_count-1
      good_data = 0
   }
}

现在在您的主脚本中,

call "col_counter.gp" "my_datafile_name"
print col_count   #number of columns is stored in col_count.

这有一些限制——如果数据文件中有一个完全非数字的列,然后是更有效的列,它会阻塞,但我认为它应该适用于许多典型的用例。

print col_count

最后一点,您可以使用环境变量GNUPLOT_LIB,然后您甚至不需要在当前目录中有col_counter.gp

【讨论】:

【解决方案2】:

假设这与this question有关,而infile.csv的内容为:

n,John Smith stats,Sam Williams stats,Joe Jackson stats
1,23.4,44.1,35.1 
2,32.1,33.5,38.5 
3,42.0,42.1,42.1 

你可以这样做:

plot.gp

nc = "`awk -F, 'NR == 1 { print NF; exit }' infile.csv`"
set key autotitle columnhead
set datafile separator ','
plot for [i=2:nc] "< sed -r '1 s/,([^ ]+)[^,]+/,\\1/g' infile.csv" using 1:i with lines

请注意,\1 在 Gnuplot 的 " 中使用时需要转义。

输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多