如何在脚本中读取不规则编号的数据文件以制作 gnuplot 图像?

Posted

技术标签:

【中文标题】如何在脚本中读取不规则编号的数据文件以制作 gnuplot 图像?【英文标题】:How to read in irregularly numbered data files in script to make gnuplot images? 【发布时间】:2013-10-31 12:26:52 【问题描述】:

我有一个脚本(称为:anim.sh)来读取我的模拟数据,在 gnuplot 中绘制每个数据文件,并将每个数据文件保存为 .gif 文件。数据命名为:g000000, g000007, g000008, g000010....等。我的脚本读入这 4 个数据文件并在 gnuplot 中绘制一个图,然后将输出保存为 .gif 文件。我的问题是如何读取这些不规则编号的数据?我有:

do for [i=0:3] 
str_num=sprintf('%03d',i)  #Write integer to string
set term gif
set output 'my_output.'.str_num.'.gif'
set xr [-0.2:0.2]
set yr [-0.2:0.2]
plot 'g000'.str_num w d

如果我的文件被称为 g000000, g000001, g000002, g000003,这将正常工作,但它们不是!所以我得到一个错误:

line 8: warning: Skipping unreadable file "g000001"
line 8: No data in plot

如何添加代码以跳过丢失的文件(例如 g000001 - g000006)并继续循环?

附言实际上,我有数百个文件,而不仅仅是 4 个,所以我不想手动重命名它们。

【问题讨论】:

你上面引用的肯定不是bash script 抱歉,我应该只说“脚本”而不是“bash 脚本”。代码保存为 anim.sh,我在 linux 中使用 >gnuplot anim.sh 运行它 Gnuplot, how to *skip* missing data files? 的可能重复项 不,这不是那个问题的重复! @Christoph:至少非常相似,接受的答案在这里可以工作。 【参考方案1】:

您可以生成所有文件的列表并对其进行迭代:

set terminal gif
set xrange[-0.2:0.2]
set yrange[-0.2:0.2]

filelist = system('ls g00*')
do for [file in filelist] 
    set output 'my_output.'.(file[2:*]).'.gif'
    plot file

【讨论】:

谢谢@Christoph。完美运行! 嗨@Christoph。我还有不同的数据文件,分别命名为 s000000、s000007、s000008、s000010...等。我如何在同一个 .gif 文件中过度绘制这些(即绘制 g000000 和 s000000)? 如果你总是有 g...s... 文件对,那么你可以使用 filelist = system('ls g00* | tr -d "g"') 并且稍后在循环中使用 plot 'g'.file, 's'.file 谢谢@Christoph。如果我没有 g... 和 s... 文件对,但我的第二批文件被称为“name_no”,该怎么办。例如star000000、star000007 等? 对不起,我不明白。你的意思是你有star000000而不是s000000?

以上是关于如何在脚本中读取不规则编号的数据文件以制作 gnuplot 图像?的主要内容,如果未能解决你的问题,请参考以下文章

您如何从屏幕会话中编写 gnu screen 脚本以打开新窗口并在其中运行命令?

如何在 GNU make 中收集过期依赖项列表?

如何在终端中制作 Python 脚本“tab-complete”目录?

如何在MIT / GNU Scheme中读取文本文件?

linux shell 如何读取文件特定位置的数据?

matlab如何批量读取带有编号的文件