Unix命令:从列中找到最小值,然后执行某些操作

时间:2014-03-10 04:19:45

标签: unix minimum

我有以下输入文件

 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列的最小值。 非常感谢你提前:)

3 个答案:

答案 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