我有一个包含24行和3列的数据文件。如何仅绘制来自特定行的数据,例如3,7,9,14,18,21? 现在我使用以下命令
plot 'xy.dat' using 0:2:3:xticlabels(1) with boxerrorbars ls 2
绘制所有24行。
我尝试了every
命令,但无法找到有效的方法。
答案 0 :(得分:3)
未经测试,但有类似的内容
plot "<(sed -n -e 3p -e 7p -e 9p xy.dat)" using ...
另一个选项可能是注释您的数据文件,如果看起来,它包含多个数据集。假设你创建了这样的数据文件:
1 2 3
2 1 3 # SetA
2 7 3 # SetB
2 2 1 # SetA SetB SetC
然后,如果你只想要SetA
,你可以在情节陈述中使用这个sed
命令
sed -ne '/SetA/s/#.*//p' xy.dat
2 1 3
2 2 1
那说...... “一般情况下,不要打印任何内容(-n
),但是,如果你确实看到包含SetA
的行,请删除哈希符号以及之后的所有内容它并打印“。
或如果您需要SetB
,则可以使用
sed -ne '/SetB/s/#.*//p' xy.dat
2 7 3
2 2 1
或者如果你想要整个数据文件,但是我们的评论被删除了
sed -e 's/#.*//' xy.dat
如果您想要SetB
和SetC
,请使用
sed -ne '/Set[BC]/s/#.*//p' xy.dat
2 7 3
2 2 1
答案 1 :(得分:2)
如果您想要的线条具有可以评估的共同点,例如第1列中的标签以&#34; a&#34;
开头 plot dataf using (strcol(1)[1:1] eq "a" ? $0 : NaN):2:xticslabel(1)
你可以通过让using语句返回&#34; NaN&#34;来跳过这些行。
这是一个丑陋的黑客,你可以使用,以防所需的行号是任意的:
linnum = " 1 3 7 12 16 21 "
plot dataf using (strstrt(linnum," ".int($0)." ") != 0 ? $0 : NaN):2
strstrt(a,b)
返回字符串b中字符串b的位置,如果没有出现,则返回零。我添加了两个空格以使行号唯一。
但我建议在这种情况下使用外部程序预处理数据,请参阅另一个答案。