linux - 将小于特定阈值的数字替换为零

标签 linux csv

我有一个 .csv 格式的大型数据表(见下文)。如果每列和行中的数字小于某个值(比如 0.1),我想用零替换它。

有人可以帮我吗?非常感谢。

我想这可以用 sed 来完成,如 this example 所示

BCC_ACR_CR  BCC_ACR_CU  BCC_ACR_FE  BCC_ACR_MN  BCC_ACR_MO
0.2826027   3.89E-12    0.58420346  2.23E-13    0.2105587
0.27986588  3.80E-12    0.58501168  2.27E-13    0.20890705
0.27986588  3.80E-12    0.58501168  2.27E-13    0.20890705
0.27986588  3.80E-12    0.58501168  2.27E-13    0.20890705
0.28038733  3.81E-12    0.58196375  5.88E-05    0.21239142
0.26855376  3.27E-12    0.60364524  2.06E-13    0.11205138
0.27220042  3.28E-12    0.60349573  2.08E-13    0.11530944
0.36294869  3.14E-12    0.50515464  1.64E-13    3.12E-12
0.36294869  3.14E-12    0.50515464  1.64E-13    3.12E-12
0.40837234  3.07E-12    0.47202708  1.73E-13    3.03E-12
0.3643896   3.25E-12    0.50431576  1.63E-13    3.14E-12
0.3643896   3.25E-12    0.50431576  1.63E-13    3.14E-12
0.35885258  3.21E-12    0.50978952  1.64E-13    3.12E-12

最佳答案

这是 GNU awk 的一个。字段分隔符被假定为一段空格,因此不允许空字段:

$ gawk -v value=0.1 '                        # give treshold values as parameter
BEGIN { RS="( +\n?|\n)" }                    # every field is considered a record
{
    ORS=RT                                   # RT stores actualized RS
    if($0<value)                             # comparison
        $0=sprintf("0%-" length()-1 "s","")  # format data to fit the field
}1' file                                     # output

输出:

BCC_ACR_CR  BCC_ACR_CU  BCC_ACR_FE  BCC_ACR_MN  BCC_ACR_MO
0.2826027   0           0.58420346  0           0.2105587
0.27986588  0           0.58501168  0           0.20890705
0.27986588  0           0.58501168  0           0.20890705
0.27986588  0           0.58501168  0           0.20890705
0.28038733  0           0.58196375  0           0.21239142
0.26855376  0           0.60364524  0           0.11205138
0.27220042  0           0.60349573  0           0.11530944
0.36294869  0           0.50515464  0           0       
0.36294869  0           0.50515464  0           0       
0.40837234  0           0.47202708  0           0       
0.3643896   0           0.50431576  0           0       
0.3643896   0           0.50431576  0           0       
0.35885258  0           0.50978952  0           0       

关于linux - 将小于特定阈值的数字替换为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59365052/

相关文章:

c - 为什么取消引用 (char*)0 的 Linux 程序并不总是出现段错误?

linux -/proc/mounts 和/etc/mtab 的排序

linux - 使用 key 和密码自动登录 SFTP

linux - 从脚本断开 SSH 连接的命令

javascript - 如何从浏览器中读取 .AppImage

android - 在android中将房间数据库导出到csv文件

php - 从对象数组的单列创建逗号分隔的字符串

python - 替换后无法写入 CSV

scala - 错误 : org. apache.spark.sql.AnalysisException:无法推断 CSV 的架构

vba - 将偶尔使用引号的 .CSV 文件导入 MS Access