我有这样一个文件:
ME45 P 1311 41130 1.253
ME39 P 1311 41130 7.700
ME38 P 1311 41130 7.776
ME37 P 1311 41130 8.285
ME36 P 1311 41130 8.689
ME30 P 1311 4113010.252
ME26 P 1311 4113010.486
ME29 P 1311 41130 9.598
ME28 P 1311 41130 9.356
ME21 P 1311 41130 9.911
ME20 P 1311 4113010.465
ME17 P 1311 4113010.984
我需要将两个直接相邻的数字之间的空格替换为零(例如,将第二列1131
和第三列411
之间的间隙替换为0
),这将返回所需的输出,例如:
KALI P 131104113008.580
IMOB P 131104113001.863
当我说两个相邻的数字之间的空格时,意味着两个数字之间只有一个空格,我想用零来代替这个空格
到目前为止,我一直在使用awk
尝试解决这个问题:
awk '{gsub("1311 41130", "1311041130")}1' myfile > myfile_tmp && mv myfile_tmp myfile
但不幸的是,该文件包含数千行,随着数字序列的变化,逐个查看列的每个块会变得很痛苦
我的解决方法是迭代一系列字符串,将它们存储在变量或数组中,检查是否存在包含空格的元素并返回其索引,然后使用该“空格”索引作为引用检查相邻元素是否为数字,然后用零替换这个空间,如果它确实有数字邻居。然而,我不知道它在bash
或awk
中是否可行。我对Python有更好的理解,但不知何故,这个空白对我来说是一个障碍;Python可能会将此空格识别为分隔符
有没有办法优雅地解决这个问题
您可以将一个简单的
sed
正则表达式与两个捕获组一起使用,这些捕获组与由单个空格分隔的数字相匹配:相关问题 更多 >
编程相关推荐