从一系列文件中获取第一个实数

时间:2015-10-23 13:14:26

标签: bash file unix

我尝试从表单的每个file.dat中获取第一个数字:

  5.01       1     56.413481000  -0.00063400   0.00095770
  5.01       2     61.193808800   0.00102170   0.00078280
  5.01       3     65.974136600  -0.00108170   0.00102620
  5.01       4     70.754464300   0.00082490   0.00103630

然后使用此编号(5.01)作为.png文件的标题。

我使用了一个bash脚本,我知道这里的一个问题中找到的line=$(head -n 1 $f)命令,但这就是文件$f的第一行。

在这种情况下,也会保存行中的空格,并且.png文件标题变为:

plot 5.01 1 56.413481000 -0.00063400 0.00095770.png

有一些方法只能拍摄5.01,并为情节设定一个修剪标题?

感谢所有人。

4 个答案:

答案 0 :(得分:3)

我可能只是用new SshConnection(c.Resolve<IDependency>())

来做
perl

无论如何都是这样的。

应删除:

  • 从行首开始不是数字的任何内容。
  • 任何非数字或VAL=$( echo "$line" | perl -pe 's/^[^\d]+//g;s/[^\d\.].*$//' ) 到行尾。

答案 1 :(得分:3)

或者使用grep:

grep -o "[0-9]*\.[0-9]*" file.dat | head -1

编辑: 没有头-1的测试用于在线输入:

echo "  5.01       2     61.193808800   0.00102170   0.00078280" | grep -o "[0-9]*\.[0-9]*"
5.01
61.193808800
0.00102170
0.00078280

使用head -1将返回第一行的第一个匹配项。

如果您知道匹配将在第一行,那么我们可以忽略第一行不正确的文件(并且不要查看完整文件): 做一个双头怪物:

head -1 | grep -o "[0-9]*\.[0-9]*" file.dat | head -1

答案 2 :(得分:2)

要提取第一个字段,假设它们是制表符分隔的:

vector

或者,如果它们是空格分隔的:

val=$(head -n 1 $f | cut -f 1)

答案 3 :(得分:1)

或者你可以避免调用任何额外的进程并使用

bash shell中保留所有数据操作
  while read realNum restOfLine ; 
     break
  done < $f

  echo $realNum

这会抓住第一个“单词”并将剩余的单词放入“restOfLine”。 break确保您只读取文件的第一行。

IHTH