Fer*_*ndo 3 regex gnuplot wildcard
我有多个文件命名为以下示例:blast_ sample1 _454LargeContigs.fna.fas_vs_ NC_016593 _filter.txt
更改的部分是"sample#"(样本)和"NC_#"(参考),它们以粗体显示.每个参考文献有35个样本.我编写了以下命令,使用35个样本的数据生成参考NC_016593的绘图:
filename(n) = sprintf("blast_sample%d_454LargeContigs.fna.fas_vs_NC_016593_filter.txt", n)
plot for [i=01:35] filename(i) using 9:3:($10-$9):($3-$3) with vectors nohead
Run Code Online (Sandbox Code Playgroud)
对于每个参考我想做一个情节,因此为此我想用通配符写一个通用命令.有没有办法直接在gnuplot中做到这一点?是否可以使用通配符仅修改"NC_#"部分(如shell脚本中的*,类似于NC_*)?
谢谢.
swe*_*ber 10
这在gnuplot中不可能直接实现.但是,您可以使用系统调用来获取要绘制的文件列表:
filelist=system("ls *.csv")
plot for [filename in filelist] filename using 1:2
Run Code Online (Sandbox Code Playgroud)
因此,这是一个示例,为每个样本编号创建一个包含所有引用的绘图:
do for [i=1:35] {
cmd = sprintf("ls blast_sample%d_454LargeContigs.fna.fas_vs_NC_*_filter.txt", i)
filelist=system(cmd)
plot for [filename in filelist] filename using ...
}
Run Code Online (Sandbox Code Playgroud)
如果您每个参考包含一个包含所有样本的绘图,则如果参考编号不是简单系列,则会变得更加困难.如果你想在一个大的情节中绘制所有东西,你可以使用
ls blast_sample*_454LargeContigs.fna.fas_vs_NC_*_filter.txt
Run Code Online (Sandbox Code Playgroud)
(这是Linux.对于Windows,你需要dir \B ...)
编辑: 这个问题和答案差不多是三年了,我在评论中没有注意到其他问题,直到最近的评论出现.
目前尚不清楚输出名称的含义.文件名?每条曲线的标签?情节标题?
一般来说,你可以这样做
set terminal pdfcairo
do for [i=1:35] {
cmd = sprintf("ls blast_sample%d_454LargeContigs.fna.fas_vs_NC_*_filter.txt", i)
filelist=system(cmd)
set output sprintf("Sample_%d.pdf", i)
title= sprintf("This is the title for plot %d", i)
plot for [filename in filelist] filename using ... title sprintf("This data comes from %s", filename)
}
unset output
Run Code Online (Sandbox Code Playgroud)
返回字符串的任何函数都可用于构建字符串.
虽然样本编号称为数字,但如果您希望使用它,则提取参考编号("NC"之后)会更加棘手.Gnuplot有一些基本的字符串函数,可能允许这样做.
如果参考编号始终具有相同的长度,我会使用substr(filename,strlen(filename)-a,strlen(filename)-b)与正确的价值观a,并b提取该号码.
如果没有,我将使用substr从参考编号开始的字符串(可以计算位置),然后搜索第一次出现的_使用strstrt,然后将字符串剪切到该位置.将此任务传递给外部命令行程序可能更容易.Linux cut可以轻松完成这项工作.
| 归档时间: |
|
| 查看次数: |
3630 次 |
| 最近记录: |