gpt4 book ai didi

linux - 如何使用 sed 将数据文件中的十进制指数值替换为 0

转载 作者:太空宇宙 更新时间:2023-11-04 11:20:43 24 4
gpt4 key购买 nike

我的问题是在一列数据中有一些指数值,通常是 2.796e-05 的形式。“e”前面的十进制值总是变化的,但它似乎总是 e-05。

所以到目前为止我一直在尝试的(尝试了各种改变希望它能起作用)是:

sed -i -e 's/[0-9]*\.[0-9]*e-05/0/g' datafile.txt

到目前为止,我所有的尝试都没有任何结果。现在我确定我只是漏掉了一件小东西或类似的东西,但我看不到它,所以我们将不胜感激。

根据要求:输入是一个大文件,形式为

19990207 8.891 6.1756 07/02/1999 9.707767 Q31
19990208 0.87234 5.2431 08/02/1999 10.239032 Q31
19990209 4.8225e-06 4.2400 09/02/1999 12.312976 Q31
19990210 0.00013825 5.3127 10/02/1999 10.353386 Q31
(上面是制表符分隔的,但我不知道如何在这里显示)

对于输出,我基本上只是不希望粗体部分为 0。但是在有指数的地方没有得到 0,似乎没有任何事情发生,输出与输入保持相同。

使用代码的脚本有点长,但如果有帮助,我可以发布。

最佳答案

re='-?([[:digit:]]+(\.[[:digit:]]*)?|[[:digit:]]*\.[[:digit:]]+)[Ee]-[[:digit:]]+'
sed -r "s/$re/0/g" file

该正则表达式将接受像 -3e-33.1e-1234.14159E-01 这样的数字——有:

  • 一个可选的负号
  • 后跟
    • 必填数字和可选的点和小数数字​​或
    • 可选数字和强制点和小数位
  • 后跟 E 或 e 和一个负整数。

我使用 POSIX [:digit:] 字符类,因为它可用。

我将正则表达式保存在一个变量中,以便于维护。然后您必须在 sed 程序主体周围使用双引号,以便可以替换 shell 变量。

使用 sed 的 -r 标志意味着您可以避免大量反斜杠转义。它(我认为)是一个 GNU sed 扩展,但你标记了你的问题 所以你应该拥有它。

关于linux - 如何使用 sed 将数据文件中的十进制指数值替换为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18514990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com