我需要将一个shell变量传递给awk,但在gnuplot中我收到了错误信息: 该变量在脚本中设置,名为FILE。这个变量根据日期而改变。 我的代码:(在Gnuplot脚本中)
plot FILE using 1:14 with points pointtype 7 pointsize 1 # this works fine
replot '< awk ''{y1 = y2; y2 = $14; if (NR > 1 && y2 - y1 >= 100) printf("\n") ; if (NR > 1 && y2 -y1 <= -100) printf("\n"); print}'' FILE' using 1:14 with linespoints
Err msg
awk: fatal: cannot open file `FILE' for reading (No such file or directory)
当我硬编码文件路径时,重新绘制工作正常。
有人能澄清一下我需要传递这个变量给awk的代码吗?我是否正确地想到了像这样的东西:
% environment_variable=FILE
% awk -vawk_variable="${environment_variable}" 'BEGIN { print awk_variable }' ?
这是我的Gnuplot脚本代码:主要是从其他帖子中拼凑而成的。
#FILE selection - we want to plot the most recent data file
FILE = strftime('/data/%Y-%m-%d.txt', time(0)) # this is correct
print "FILE is : " .FILE
#set file path variable for awk : (This is where my problem is)
awk -v var="$FILE" '{print var}'
awk '{print $0}' <<< "$FILE"
感谢您的预先帮助。
"$FILE"
代替FILE
。在你的第二个脚本中,最后一行不需要使用<<<
。awk -v var="$FILE" '{print var}'
是不完整的语法,它需要一个文件作为参数,否则会使你的计算机停止响应。只需使用awk '{print $0}' "$FILE"
即可。 - Aserre<<<
,这会将变量中的数据传递到awk
。 - JotneFILE
只保存文件的路径,而不是其整个内容。如果是这样的话,那么你确实是正确的。编辑:经过进一步阅读,似乎 OP 只是将最新文件的路径存储在$FILE
中。然后他应该删除<<<
(否则他的 awk 命令只会打印路径)。 - Aserre