我的文件中包含的数字范围为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)有条件地替换文件中依赖于其值的所有元素?欢迎替代方案!
答案 0 :(得分:2)
在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