我一直在尝试使用bash脚本编写代码来读取file1.dat并查找特定数字并将其指定给变量。
例如,在file1.dat中,
10 10 1 0
0.8499360E+02 0.6965500E-09 0.6965500E-09 0.2022791E-08 0.5000000E-15
1.000000000000000E-004
CAR
HgRO
5.26290852 -15.00879477 301 -1.68859640 1.00000000
-15.009 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
-14.941 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
-14.874 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
-14.806 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
--////////-----/////---
从上面的文件中我只想读取数字-1.68859640
并声明一个变量" EFERMI"在剧本中。
所以,代码看起来应该是,
EFERMI=$(head -n +6 ../DOSCAR | tail -1)
但这个命令整行的问题来了。
那么,请你帮我找到正确的命令。
答案 0 :(得分:2)
您可以尝试使用awk
:
EFERMI=$(awk 'NR==6{print $4}' file1.dat)
NR
是记录号(行号),$4
是该行的第4个元素。
答案 1 :(得分:1)
在您获得所需号码的行之后,您可以使用read
从中提取所需的号码。如果它在该行中具有固定位置作为单词,则可以简单地跳过所需数量的单词,如下所示:
infile="../DOSCAR"
LINE="$(head -n +6 "$infile" | tail -1)"
read _ _ _ _ _ _ EFERMI _ <<<"$LINE"
您可以(也可能应该)阅读文件的其他部分并检查格式和内容,以确保您获得了正确的输入和正确的数字。
答案 2 :(得分:0)
Zrin已经提供了一种解决方案。以下是其他人:
使用cut
,您可以选择任何字段,前提是您知道字段编号:
EFERMI=$(head ....|tail ....|cut -d ' ' -f 7)
如果你不知道字段编号,但知道它是最后一个字段,你可以做一个
EFERMI=$(LINE##* }
其中 LINE 与Zrin的解决方案一样。这假设LINE没有尾随空格。当然,在提取字段之前,您始终可以删除尾随空格。