【问题标题】:gnuplot5 - sh: 1: Syntax error: "(" unexpected with awkgnuplot5 - sh:1:语法错误:“(”意外与awk
【发布时间】:2017-04-06 13:17:18
【问题描述】:

我正在尝试在 gnuplot 中将 paste 与 awk 结合使用,以便我可以获取两个不同文件的某些列并绘制结果。但是,我收到此错误:

sh: 1: Syntax error: "(" unexpected

我知道它对我的 gnuplot 脚本的那部分不满意:

system("paste <(awk '{print $1,$2,$3,$4,$5,$14}' ".filename(i).") <(awk '{print $14}' ".filename_without.")  > Tim_res_".i)

更具体地说是 awk 之前的括号。在不使用变量名的情况下替换文件名也不起作用,而所有命令在 gnuplot 之外都可以正常工作。如果我删除括号,那么它会说它无法识别 awk,并且该命令在 gnuplot 之外也不起作用。

我读过添加#!/usr/bin/bash 可能会有所帮助,但它实际上并不能解决问题,也不会给出另一个错误消息。我以前从未在 gnuplot 中使用此类命令遇到过此类问题。 我有很多文件要以类似的方式绘制,因此为什么我想直接在 gnuplot 中使其自动运行,system 命令只是在这里确保它在我可以直接在@987654326 之后替换它之前工作@gnuplot 的命令。

感谢您的帮助

【问题讨论】:

  • &lt; ( 在两个字符之间有一个空格也是 shell 中的语法错误。
  • 对不起,我从终端复制到这里时出错了。我编辑了消息。

标签: awk gnuplot paste


【解决方案1】:

mklement0 has explained 问题所在 - 一种解决方法是完全避免进程替换:

awk 'NR == FNR { col[NR] = $14; next } { print $1,$2,$3,$4,$5,$14,col[FNR] }' file2 file1

即先读取第二个文件并保存列,然后在awk中自己“粘贴”。

将 awk 命令移至 gnuplot:

system("awk 'NR == FNR { col[NR] = $14; next } \
{ print $1,$2,$3,$4,$5,$14,col[FNR] }' " . filename_without . " " . filename(i))

【讨论】:

    【解决方案2】:

    如错误消息所示,您的命令是使用 sh (/bin/sh) 执行的,这是 gnuplot 的 system 命令所使用的。

    sh,只能假定具有 POSIX 强制功能,不支持 process substitutions (&lt;(...)),这是非标准 Bash 功能。 p>

    Tom Fenech's helpful answer 显示了您的命令的重新表述,完全绕过了进程替换的需要。

    如果您确实需要(相当于)流程替换

    • (a) 要么:调用bash -c 作为system() 命令字符串的一部分,并将原始命令传递给它(这会带来引用挑战)。

    • (b) 或者:使用临时文件而不是进程替换;在您的情况下,创建至少 1 个包含 awk 输出的临时文件,然后将其传递给 paste

    简化示例:

    (a) 使用嵌入式bash -c 调用

    system("bash -c \"paste <(cat '".filename1."') <(cat '".filename2."')\"")
    

    注意内部命令是如何包含在\" 中的,因此它可以作为单个参数传递给bash -c

    (b) 使用临时文件

    system("cat '".filename1."'>>/tmp/$$; cat '".filename2."' | paste /tmp/$$ -; rm /tmp/$$")
    

    注意 1 个awk 命令如何通过管道向paste 提供输入,但另一个需要一个临时文件。

    【讨论】:

      猜你喜欢
      • 2016-05-30
      • 1970-01-01
      • 2016-10-18
      • 2017-10-31
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 2023-03-25
      相关资源
      最近更新 更多