簡體   English   中英

如何在 shell 命令行中使用帶有 awk 的 gnuplot (-e swtich)

[英]How can I use gnuplot with awk in shell command line (-e swtich)

我想在 shell 命令行中使用帶有awk gnuplot ,如下所示。

gnuplot -persist -e " plot '< awk_command' "

我的awk命令是

awk '/match_pattern/ {print $4}' log.txt

我在我的 awk 命令中找不到如何處理引號。

gnuplot -persist -e "plot " < awk '/matchpattern/ {print $4}' log.txt " "

這產生了一條錯誤消息

awk: No such file or directory.

當我在gnuplot這樣做時,沒有問題。

gnuplot> plot " < awk '/matchpattern/ {print $4}' log.txt "

為了方便起見,我想在 shell 命令行中而不是在 gnuplot 中繪制它。

從 Gnuplot 文檔:

命令行替換由用反引號括起來的系統命令指定。 生成此命令,它產生的輸出替換命令行上的反引號文本

來源: GnuPlot 5.0 文檔

所以這可以很容易地在 gnuplot 本身中進行測試:

gnuplot> `awk 'BEGIN{print "plot sin(x)"}'`

如果您現在想在命令行中將它與-e標志一起使用,它應該如下所示:

$ gnuplot --persist -e "`awk 'BEGIN{print \"plot sin(x)\"}' ` "

請注意,我們必須對 awk 命令中的 <double-quotes> 進行轉義。 這是由於 bash 引用規則。 如果您不想轉義雙引號,則必須使用單引號並再次轉義它們。 這將看起來像這樣:

$ gnuplot --persist -e '`awk '"'"'BEGIN{print "plot sin(x)"}'"'"' ` '

如果你只是使用awk來生成數據並且你想使用 gnuplot 的管道系統:

在具有 popen 函數的系統上,數據文件可以通過 shell 命令通過以“<”開頭的文件名進行管道傳輸。 例如,

 pop(x) = 103*exp(-x/10) plot "< awk '{print $1-1965, $2}' population.dat", pop(x)

來源: GnuPlot 5.0 文檔

因此,在 OP 的情況下,通過正確的轉義,您可以執行以下操作:

$ gnuplot --persist -e "plot \"< awk '/matchpattern/{print \$4}' log.txt \""

請注意我還必須如何轉義$ ,否則,bash 會將其替換為第 4 個 bash 參數,這很可能是一個空字符串。

您只需要轉義嵌套的雙引號:

gnuplot -persist -e "plot \" < awk '/matchpattern/ {print $4}' log.txt \" "

如果你不這樣做,你的 shell 將解釋為 gnuplot 的單獨參數

  • -e "plot "
  • < awk
  • '/matchpattern/ {print $4}'
  • log.txt

並且 shell 會錯誤地認為它應該從名為awk的文件重定向gnuplot命令的標准輸入。 由於該文件在您的工作目錄中不存在,它會引發錯誤: awk: No such file or directory.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM