awk命令提取某行的最后一个数值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk命令提取某行的最后一个数值相关的知识,希望对你有一定的参考价值。
我不是学计算机的,想用awk命令提取数值,不是太明白。比如这样一行:
energy without entropy = -3.74486268 energy(sigma->0) = -3.74530659
我要用awk命令提取最后一个数(-3.74530659),应该怎么做呢?
之前对于:entropy T*S EENTRO = -0.00066587,
别人的代码是这样的:
TS=`grep "EENTRO" OUTCAR | tail -1 | awk 'printf "%12.6f \n", $5 '`
echo $TS >>comment
请问我那个应该怎么修改呢?谢谢了
echo $TS >>comment
这样就可以了。
反引号`内的命令被赋值给变量TS。echo $TS输出变量,用>>将输出重定向到comment文件中。
反引号内的命令一共是3个,通过2次管道将输出进行传递。
grep "energy" OUTCAR表示搜索OUTCAR文件中带有energy单词的行
| 表示将上一个命令的输出结果作为下一个命令的输入
tail -1表示取最后一行,这个根据你的OUTCAR文件的内容而定,如果只有一行有单词energy,就不需要这个命令,如果有多行包含energy,就根据需要取相应行。
awk 'printf "%12.8f \n", $8 ' 表示将行的第8列打印出来,awk命令默认列分隔符就是空格,所以你这一行所需要取的数值在第8列上。打印格式为精确到小数点后8位(数值总位数为12位),根据你需要的精度取舍。如果要取完整的数值,也可以直接将这部分改为awk 'printf, $8 '。
就是这样了。 参考技术A 你可以直接用awk这样做:
awk 'BEGINFS="="print $2' xxx.txt
因为我看你最后一个字段前有一个等号,所以用FS="="作为指定字段分隔符 参考技术B 假设文件是OUTCAR
TS=`grep "energy" OUTCAR |tail -1 |awk 'print $5'`
echo $TS >> comment
AWK
#AWK内建变量 变量 意义 默认值 ARGC 命令行参数的个数 - ARGV 命令行参数数组 - FILENAME 当前输入文件名 - FNR 当前输入文件中的记录号 - FS 控制着输入行的字段分割符 " " NF 当前记录的字段个数 - NR 目前为止已读的记录数量 - OFMT 数值的输出格式 "%.6g" OFS 输出字段分割符 " " ORS 输出的记录的分割符 " " RLENGTH 被函数 match 匹配的字符串的长度 - RS 控制着输入行的记录分割符 " " RSTART 被函数 match 匹配的字符串的开始 SUBSEP 下标分割符 "