如何用awk更简洁实现CSV第7列浮点格式转整数处理
更简洁的单步awk实现
你原来的两步逻辑可以直接合并为一条命令,无需生成中间临时文件,大文件处理效率更高:
awk 'BEGIN { FS=OFS="\",\"" } { $7 = int($7) "\"" } 1' "$test" > "$test1"
写法说明
- awk做数值转换时会自动忽略字段开头的空格、前导零,以及数值部分结束后的所有非数值字符(这里的
.0000"会被自动丢弃),用int()直接取整即可得到目标整数 - 取整后直接补末尾双引号,省去了第二次awk处理的步骤,减少大文件场景下的IO开销
如果担心浮点精度问题,也可以保留sprintf的写法合并为单步:
awk 'BEGIN { FS=OFS="\",\"" } { $7 = sprintf("%d\"", $7) } 1' "$test" > "$test1"
内容的提问来源于stack exchange,提问作者G D
相关产品推荐
相关产品推荐

