如何在包含使用 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
我有一个输出,中间包含类似这样的内容。
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