首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用sed删除特定列的小数

用sed删除特定列的小数
EN

Stack Overflow用户
提问于 2021-04-28 16:36:33
回答 4查看 282关注 0票数 3

我正在处理一个csv文件,我想用特定列的小数截断数字。其中三行是:

123;rr;2;RRyO,国际象棋mobil;pio;25.766;1;0;24353;21.876;;S

1243;rho;9;RpO,国际象棋yext cat;downpio;67.98;1;0;237753;25.346;;S

1243;rho;9;RpO,国际象棋yext cat;pio;73;1;0;237753;25.346;;S

我要这个输出:

123;rr;2;RRyO,国际象棋mobil;pio;25;1;0;24353;21.876;;S

1243;rho;9;RpO,国际象棋yext cat;downpio;67;1;0;237753;25.346;;S

1243;rho;9;RpO,国际象棋yext cat;pio;73;1;0;237753;25.346;;S

我试过thies代码:

代码语言:javascript
复制
sed  -e '/^.\+pio$/,/^\..\*;[[:digit:]];[[:digit:]];.\*;.\*;.\*;.\*[[:space:]]$/d' data.csv

但不管用..。有什么建议吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-04-28 16:46:54

您可以使用

代码语言:javascript
复制
sed 's/^\(\([^;]*;\)\{5\}[0-9]*\)[^;]*/\1/' data.csv

详细信息

  • ^ -字符串的开始
  • \(\([^;]*;\)\{5\}[0-9]*\) -第1组(\1):
    • \([^;]*;\)\{5\} -除;;外,任何零或多个字符都会出现5个
    • [0-9]* -零或更多位数

  • [^;]* -除;以外的零或多个字符。

在线演示

代码语言:javascript
复制
s='123;rr;2;RRyO, chess mobil;pio;25.766;1;0;24353;21.876;;S
1243;rho;9;RpO, chess yext cat;downpio;67.98;1;0;237753;25.346;;S
1243;rho;9;RpO, chess yext cat;pio;73;1;0;237753;25.346;;S'
sed 's/^\(\([^;]*;\)\{5\}[0-9]*\)[^;]*/\1/' <<< "$s"

输出:

代码语言:javascript
复制
123;rr;2;RRyO, chess mobil;pio;25;1;0;24353;21.876;;S
1243;rho;9;RpO, chess yext cat;downpio;67;1;0;237753;25.346;;S
1243;rho;9;RpO, chess yext cat;pio;73;1;0;237753;25.346;;S
票数 1
EN

Stack Overflow用户

发布于 2021-04-28 16:49:24

带着你所展示的样品,请试一试。您可以通过awk的sprintf函数简单地将浮点数转换为数字。

代码语言:javascript
复制
awk 'BEGIN{FS=OFS=";"} {$6=sprintf("%d",$6)} 1' Input_file

来自awk的手册页

sprintf(fmt,expr list)根据fmt打印expr-list,并返回结果字符串。

票数 3
EN

Stack Overflow用户

发布于 2021-04-28 16:44:58

我还没有完全反向设计您的sed命令,但这似乎是可行的:

代码语言:javascript
复制
sed 's/\(.*pio;[0-9]*\)\.[0-9]*/\1/' data.csv
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67304335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档