根据值替换文件中的值

Replace values in a file conditional on their value

我有一个包含 10.00-10.6620.67-21.3330.67-31.3340.34-42.00.

范围内数字的文件

示例输入:

10.21  21.12  10.50  30.80
30.91  31.12  31.00  10.30
21.21  20.99  20.90  31.20
41.71  41.72  10.10  41.80

我想将文件转换为:

10.00-10.20 = 0|0:[DOSE]
10.21-10.66 = .|.:[DOSE]
20.90-21.10 = 1|0:[DOSE]
20.67-20.89 = .|.:[DOSE]
21.11-21.33 = .|.:[DOSE]
30.90-31.10 = 0|1:[DOSE]
30.67-30.89 = .|.:[DOSE]
31.11-31.33 = .|.:[DOSE]
41.80-42.00 = 1|1:[DOSE]
41.34-41.79 = .|.:[DOSE]

示例输出:

.|.:10.21  .|.:21.12  .|.:10.50  .|.:30.80
0|1:30.91  .|.:31.12  0|1:31.00  .|.:10.30
.|.:21.21  1|0:20.99  1|0:20.90  .|.:31.20
.|.:41.71  .|.:41.72  0|0:10.10  1|1:41.80

我可以想办法在 R 中做到这一点,但实际文件的大小大约为 1000*5000000 个元素,我认为 R 无法应对!

有没有一种方法可以使用 sed 或 awk 等内联文本编辑器根据元素的值有条件地替换文件中的所有元素?欢迎其他节目!

在 awk 中执行此操作的简单方法如下:

{
    for (i=1;i<=NF;++i) {
        if ($i>=10&&$i<=10.2) $i="0|0:"$i
        else if ($i>=10.21&&$i<=10.66) $i=".|.:"$i
        # etc.
    }
    print
}

也就是循环遍历每条记录的每个字段,根据字段的值添加你想要的字符串。您可以将脚本放在一个文件中,然后 运行 就像 awk -f script.awk input_file