我有以下输入文件
SCFE: SCF energy: UDFT(b3lyp) -7255.77607552893 hartrees iterations: 36
SCFE: SCF energy: UDFT(b3lyp) -7256.47180169446 hartrees iterations: 13
SCFE: SCF energy: UDFT(b3lyp) -7257.05043442327 hartrees iterations: 25
SCFE: SCF energy: UDFT(b3lyp) -7257.53756596970 hartrees iterations: 7
SCFE: SCF energy: UDFT(b3lyp) -7257.94483191615 hartrees iterations: 7
SCFE: SCF energy: UDFT(b3lyp) -7258.28358389906 hartrees iterations: 7
SCFE: SCF energy: UDFT(b3lyp) -7258.56278138629 hartrees iterations: 7
.....
从这个文件中,我希望提取该文件第5列的最小值,并进行以下计算
cat input.dat | awk'{print(5美元 - 至少第5列)* 627.509}'>输出
但我不确定如何查找,存储和使用第5列的最小值。 非常感谢你提前:)
答案 0 :(得分:2)
每行需要两次传递<{1}}
试试这个:
($5 - minimum of 5th column)*627.509
awk 'NR==FNR{min=min<$5?min:$5;next}{$5=($5-min)*627.509}1' OFS='\t' file file
$ cat file
SCFE: SCF energy: UDFT(b3lyp) -7255.77607552893 hartrees iterations: 36
SCFE: SCF energy: UDFT(b3lyp) -7256.47180169446 hartrees iterations: 13
SCFE: SCF energy: UDFT(b3lyp) -7257.05043442327 hartrees iterations: 25
SCFE: SCF energy: UDFT(b3lyp) -7257.53756596970 hartrees iterations: 7
SCFE: SCF energy: UDFT(b3lyp) -7257.94483191615 hartrees iterations: 7
SCFE: SCF energy: UDFT(b3lyp) -7258.28358389906 hartrees iterations: 7
SCFE: SCF energy: UDFT(b3lyp) -7258.56278138629 hartrees iterations: 7
答案 1 :(得分:1)
您是否要为表格中的每个行打印($5 - minimum of 5th column)*627.509
?如果不对表进行两次扫描,我认为你不能这样做。但是,如果您只想找到该列的最小值并将其乘以627.509(该数字来自哪里,顺便说一下?)那么这很容易:
$ awk '{ if ($5 < lowest) {lowest = $5}} END {print lowest * 627.509}' input.dat
$ MINVAL=`awk '{ if ($5 < lowest) {lowest = $5}} END {print lowest}' input.dat`
$ awk '{nval=($5-"$MINVAL")*627.509; print nval}' input.dat
答案 2 :(得分:0)
您可以使用awk为字段查找min,然后将其用于进一步计算。
awk 'NR == 1 || $5 < min {min = $5}END{print min * 627.509}' input.dat > output