Board logo

标题: [文本处理] [己解决]删除行尾小数点后面的小数 [打印本页]

作者: keshun    时间: 2019-4-15 09:37     标题: [己解决]删除行尾小数点后面的小数

买1        5.87                0.0000                7        3.722806
买7        5.38                -0.5842                2        1124.7
卖4        5.42                0.6557                4        383.96088
卖10        5.75                1.2877                1        174
卖13        5.95                1.2877                2        1144.53


求代码删除行尾小数点后面的小数,谢谢!


买1        5.87                0.0000                7        3
买7        5.38                -0.5842                2        1124
卖4        5.42                0.6557                4        383
卖10        5.75                1.2877                1        174
卖13        5.95                1.2877                2        1144
作者: Batcher    时间: 2019-4-15 09:42

  1. gawk "gsub(/\..*/,\"\",$5)" 1.txt > 2.txt
复制代码

作者: Batcher    时间: 2019-4-15 09:45

  1. sed "s/\.[0-9]\+$//" 1.txt > 2.txt
复制代码

作者: smss    时间: 2019-4-19 19:05

Batcher 发表于 2019-4-15 09:45



只能输入范围0~9999999999999999999999999999999999999999999999999999.999999999999的正则表达式有吗
作者: WHY    时间: 2019-4-19 22:23

本帖最后由 WHY 于 2019-4-19 22:33 编辑

回复 4# smss
  1. @echo off
  2. set "s=12345.6789"
  3. echo;%s%|sed -n -r "/^([1-9][0-9]{0,51}|0)(\.[0-9]{0,12})?$/p"|findstr .&&echo;Y||echo;N
  4. pause
复制代码

作者: WHY    时间: 2019-4-19 22:27

本帖最后由 WHY 于 2019-4-19 22:32 编辑
  1. set "s=9999999999999999999999999999999999999999999999999999.999999999999"
  2. PowerShell "'%s%' -match '^(?:[1-9]\d{0,51}|0)(\.\d{0,12})?$'"
复制代码

作者: smss    时间: 2019-4-19 23:08

本帖最后由 smss 于 2019-4-19 23:23 编辑
回复  smss
WHY 发表于 2019-4-19 22:23
  1. set /p Z=请输入数字:
  2. if /i "%Z%"=="q" exit
  3. echo %Z%|findstr "^(?:[1-9]\d{0,51}|0)(\.\d{0,12})?$">nul||(echo 输入错误,超出范围&goto X)
  4. pause
复制代码
这样不行 搜了好多 这是不是不通用
作者: WHY    时间: 2019-4-20 11:38

回复 7# smss


    findstr 这么容易搞定,还要 sed 做什么?
批处理脚本而已,先谈“够用”,别动不动就谈通用
作者: WHY    时间: 2019-4-20 11:41

  1. @echo off
  2. set "s=9999999999999999999999999999999999999999999999999999.999999999999"
  3. for /f "tokens=1,2delims=." %%i in ('echo;%s%^|findstr /b /e "[1-9][0-9]* 0 [1-9][0-9]*\.[0-9]* 0\.[0-9]*"') do (
  4.     set "a=%%i"
  5.     set "b=%%j"
  6. )
  7. if defined a (
  8.     if defined b (
  9.         if "%b:~12%" NEQ "" (
  10.             echo;N
  11.         ) else if "%a:~52%" NEQ "" (
  12.             echo;N
  13.         ) else (echo;Y)
  14.     ) else if "%a:~52%" NEQ "" (
  15.         echo;N
  16.     ) else (echo;Y)
  17. ) else (echo;N)
  18. pause
复制代码

作者: smss    时间: 2019-4-20 14:39

WHY 发表于 2019-4-20 11:41


也看不了不少帖了 看来BAT0对位数限制真没法大括号
  不能通用 想精减需要学会多种语言周转




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2