根据值替换文件中的值
Replace values in a file conditional on their value
我有一个包含 10.00-10.66
、20.67-21.33
、30.67-31.33
和 40.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
我有一个包含 10.00-10.66
、20.67-21.33
、30.67-31.33
和 40.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