代码之家  ›  专栏  ›  技术社区  ›  Arshad Mehmood

如何在EOF中使用grep输出?

  •  0
  • Arshad Mehmood  · 技术社区  · 7 年前

    我是一名新的学习者,正在运行一个带有以下脚本的程序:

    ./Multiwfn >HF-Dr.out << EOF
    HF.fchk
    3
    21
    2
    2
    grep 'Global surface minimum:' HF-ESP.out | awk '{print $7,$8,$9,$7,$8,$9}'
    EXIT
    EOF
    

    此grep的输出类似于:

    0.043532 -0.032964 1.960094 0.043532 -0.032964 1.960094

    我希望使用grep的输出而不是脚本中的输入,即我希望脚本如下所示:

    ./Multiwfn >HF-Dr.out << EOF
    HF.fchk
    3
    21
    2
    2
    0.043532  -0.032964   1.960094  0.043532  -0.032964   1.960094
    EXIT
    EOF
    

    是否有任何方法可以隐藏(使其不可执行)程序中的grep输入,而只使用其输出?提前谢谢你。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Ljm Dullaart    7 年前

    我不理解你问题中的“使不可执行”部分。据我所知,你希望在交给 ./Multiwfn .

    有几种解决方案:

    1) 佩萨西评论:

    ./Multiwfn >HF-Dr.out << EOF
    HF.fchk
    3
    21
    2
    2
    $(grep 'Global surface minimum:' HF-ESP.out | awk '{print $7,$8,$9,$7,$8,$9}')
    EXIT
    EOF
    

    2) 在管道中创建输入:

    (echo -e "HF.fchk\n3\n21\n2\n2;grep 'Global surface minimum:' HF-ESP.out | awk '{print $7,$8,$9,$7,$8,$9}';echo EXIT) | ./Multiwfn >HF-Dr.out
    

    3) 使用中间文件:

    cat > file <<EOF
    HF.fchk
    3
    21
    2
    2
    EOF
    grep 'Global surface minimum:' HF-ESP.out | awk '{print $7,$8,$9,$7,$8,$9}' >> file
    echo EXIT >> file
    ./Multiwfn < file >HF-Dr.out
    rm file
    

    我相信还有更多的方法,但这应该会让你走上正轨。