如何用awk保留浮点数不变,为整数添加.0后缀?
解决方案:保留CSV原有小数精度,为整数补全
.0格式 问题分析
现有CSV文件,第一列为非数值字段,其余列均为无科学计数法的整数或浮点数。需求是将所有整数转为x.0格式,同时完整保留原有浮点数的精度(如333.3333保持不变)。原有awk命令使用%f会截断浮点数精度,%.1f会强制统一为一位小数,均不符合要求。
实现脚本
通过awk正则匹配判断字段是否为纯整数,仅对整数追加.0,浮数字段保持原样:
#!/bin/bash LC_NUMERIC=C awk 'BEGIN{FS=OFS=","} NR>1{for(i=2;i<=NF;i++){if($i !~ /\./) $i = $i ".0"}}1' input.csv > output.csv
脚本说明
BEGIN{FS=OFS=","}:提前设置输入输出分隔符为逗号,避免每行重复配置NR>1:跳过第一行表头,仅处理数据行for(i=2;i<=NF;i++):遍历第2列到最后一列(跳过第一列非数值字段)if($i !~ /\./):判断当前字段是否不含小数点(即纯整数)$i = $i ".0":为纯整数字段追加.01:awk简写语法,用于打印所有行
示例验证
输入文件input.csv
gene_name,VarXCRep.1,VarXCRep.2,VarXCRep.3,VarX1Rep.1,VarX1Rep.2,VarX1Rep.3 Soltu.DM.01G000010,360.7000522,361.5910696,333.0843759,395.2279977,386.8290979,377.756613 Soltu.DM.01G000070,2,540,0,0,1.83331326,0
输出文件(符合期望)
gene_name,VarXCRep.1,VarXCRep.2,VarXCRep.3,VarX1Rep.1,VarX1Rep.2,VarX1Rep.3 Soltu.DM.01G000010,360.7000522,361.5910696,333.0843759,395.2279977,386.8290979,377.756613 Soltu.DM.01G000070,2.0,540.0,0.0,0.0,1.83331326,0.0
内容的提问来源于stack exchange,提问作者Fanta
相关产品推荐
相关产品推荐

