搜索和替换数字数据文件中的字符串

搜索和替换数字数据文件中的字符串

我有一个需要编辑的数据文件,其格式为:

-8.915602898150751e-05-7.050591991128022e-05-4.361255125222242e-052.309505585477205e-05-2.223040239244275e-051.088544645124330e-011.000000000000000e-15
7.528375184423486e-062.558479420795495e-052.537280868441473e-04-5.119189471594489e-056.455268837875294e-054.463628820267331e-011.000000000000000e-15

如您所知,数字没有空格,我想以非常具体的方式编辑该文件(我将使用它作为模拟工作的输入文件)。我希望该文件看起来像:

 -1.0000000000000001e-001  0.0000000000000000e+000  0.0000000000000000e+000  4.3052618410549812e+009  0.0000000000000000e+000  0.0000000000000000e+000  2.4853118072193338e-015
  2.4106903033391415e-004  4.3586744793222273e-005  4.5561759893187341e-005 -4.0315591956328645e+007 -9.1758824977759705e+003 -2.5181138417225957e+004  2.4853118072193338e-015

我开发了一种算法来进行此类编辑,并在 Notepad++ 中进行了尝试,但是程序在文件中添加了“不可见”字符,这使得它对我的模拟无效。这是算法:

  1. 找到字符串“-1”。并替换为字符串“-1”。 (替换中负号前面有一个空格)

  2. 对数字 2-9 重复步骤 1。

  3. 找到字符串“1”。并替换为字符串“1”。 (替换中1前面有两个空格)

  4. 对数字 2-9 重复步骤 3。

  5. 找到字符串“- 1”。并替换为“-1”。 (查找字符串中负号和1之间有两个空格)

  6. 对数字 2-9 重复步骤 5。

我想在 UNIX shell 中执行此操作(我使用的是 macbook 终端),因为我相信这不会添加不可见字符并损坏我的数据。大家有什么帮助吗?

提前致谢!!!!!

答案1

sed -E '
   s/[0-9.+-]*e[-+]?[0-9]{2}/     &/g
   s/ *(.{22}[0-9])/\1/g' < input.txt > output.txt

这假设是 GNU 或 FreeBSD(或 OS/X 之类的衍生版本)sed,或者sed符合 Unix/POSIX 标准的下一版本(对于-E)。

相关内容