gpt4 book ai didi

bash - 使用 gnuplot 编写脚本——在 sed 处

转载 作者:行者123 更新时间:2023-12-04 05:33:54 25 4
gpt4 key购买 nike

所以我正在寻找一些快速而肮脏的解决方案。

问题:

我正在尝试使用 gnuplot 绘制数据文件的特定部分。这很好。基本路线类似于

plot "<(sed -n '1,100p' pointsandstuff.dat)" u 1:log($4**2+$5**2) notitle

这工作得很好。我想要的下一步是在我的标题中包含另一部分数据,即数据条目 $3(对于列出的点来说是相同的,所以我可以从任何地方解析它)。我遇到了问题,因为虽然情节看起来不错,但我似乎无法将正则表达式信息输入到“标题”中。一个不起作用的例子”
plot "<(sed -n '1,100p' pointsandstuff.dat)" u 1:log($4**2+$5**2) title "<(sed -n '1,1p' pointsandstuff.dat)"

(理论上,这会吐出一整条数据线,但实际上我只会得到标题“<(sed ...”)

我尝试用 bash 脚本攻击它,但是我使用的“$”使 bash 脚本陷入困境:
#!/bin/bash


STRING=$(echo|sed -n '25001,25001p' pointsandstuff.dat)
echo $STRING


gnuplot -persist << EOF
set xrange[:] noreverse nowriteback
set yrange[:] noreverse nowriteback

eval "plot "<(sed -n '25001,30000p' pointsandstuff.dat)" u 1:log($4**2+$5**2) title $STRING


EOF

Bash 不知道如何处理 '$4' 和 '$5'。

最佳答案

您似乎正在尝试进程替换,但双引号使其在第一种情况下停止工作,而在第二种情况下您需要命令替换。

你有:

plot "<(sed -n '1,100p' pointsandstuff.dat)" u 1:log($4**2+$5**2) \
title "<(sed -n '1,1p' pointsandstuff.dat)"

你需要:
plot <(sed -n '1,100p' pointsandstuff.dat) u 1:log($4**2+$5**2) \
title "$(sed -n '1,1p' pointsandstuff.dat)"

第二种情况下的双引号可能不是绝对必要的,但你不会出错。
  • 进程替换生成一个文件名并将嵌套命令的输出提供给该文件;该命令认为它正在读取一个文件(因为它正在读取一个文件)。
  • 命令替换捕获字符串中嵌套命令的输出并将该字符串传递给命令(当它用作命令的参数时,如下所示)。
  • 关于bash - 使用 gnuplot 编写脚本——在 sed 处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12223772/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com