我正在处理一个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代码:
sed -e '/^.\+pio$/,/^\..\*;[[:digit:]];[[:digit:]];.\*;.\*;.\*;.\*[[:space:]]$/d' data.csv但不管用..。有什么建议吗?
发布于 2021-04-28 16:46:54
您可以使用
sed 's/^\(\([^;]*;\)\{5\}[0-9]*\)[^;]*/\1/' data.csv详细信息
^ -字符串的开始\(\([^;]*;\)\{5\}[0-9]*\) -第1组(\1):\([^;]*;\)\{5\} -除;和;外,任何零或多个字符都会出现5个[0-9]* -零或更多位数[^;]* -除;以外的零或多个字符。见在线演示
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"输出:
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发布于 2021-04-28 16:49:24
带着你所展示的样品,请试一试。您可以通过awk的sprintf函数简单地将浮点数转换为数字。
awk 'BEGIN{FS=OFS=";"} {$6=sprintf("%d",$6)} 1' Input_file来自awk的手册页
sprintf(fmt,expr list)根据fmt打印expr-list,并返回结果字符串。
发布于 2021-04-28 16:44:58
我还没有完全反向设计您的sed命令,但这似乎是可行的:
sed 's/\(.*pio;[0-9]*\)\.[0-9]*/\1/' data.csvhttps://stackoverflow.com/questions/67304335
复制相似问题