如何在包含使用 AWK 的特定字符串的行之后的第三列中将值打印到不同的文件?

How to print the value in third column of a line which comes after a line which, contains a specific string using AWK to a different file?

我有一个输出,中间包含类似这样的内容。

  Stopping criterion = max iterations
  Energy initial, next-to-last, final = 
        -83909.5503696     -86748.8150981     -86748.8512012

我想做的是将包含字符串“Energy”的行之后的最后一个值(第 3 列)打印到另一个文件。我必须从 100 个不同的文件中打印出这些值。目前我一直在尝试只查看单个文件的这一行。

awk -F: '/Energy/ { getline; print [=11=] }' inputfile > outputfile

但这会产生如下输出:

       -83909.5503696     -86748.8150981     -86748.8512012

更新 - 在下面建议的帮助下,我能够将值输出到文件中。但是当它读取不同的文件时,它会覆盖最终输出文件并打印出它读取的最终文件的值。我试过的是这个,

#SBATCH --array=1-100

num=$SLURM_ARRAY_TASK_ID..
fold=$(printf '%03d' $num)

cd $main_path/surf_$fold
awk 'f{print ; f=0} /Energy/{f=1}' inputfile > outputfile

这不是 getline 的合适工作,请参阅 http://awk.freeshell.org/AllAboutGetline,并且我知道为什么当您的字段是 [=18= 时,您将 FS 设置为 :-F: ]-按照 awk 默认的方式分隔。

以下是我认为您尝试通过 1 次调用 awk 来完成的操作:

awk 'f{print ; f=0} /Energy/{f=1}' "$main_path/surf_"*"/inputfile > outputfile