Linux 用映射中的值替换第一个字段

Linux 用映射中的值替换第一个字段,linux,string,sed,replace,syntax,Linux,String,Sed,Replace,Syntax,我在txt文件中有一些数据(基本上是边界框注释)(以空格分隔) 我想用其他字符替换多次出现的特定字符。比如说 0 0.649489 0.666668 0.0625 0.260877 1 0.89485 0.445085 0.0428084 0.084259 1 0.80625 0.508509 0.0469892 0.005556 2 0.529068 0.0906668 0.0582908 0.0954804 2 0.565625 0.0268509 0.0040625 0.0546296

我在txt文件中有一些数据(基本上是边界框注释)(以空格分隔)

我想用其他字符替换多次出现的特定字符。比如说

0 0.649489 0.666668 0.0625 0.260877
1 0.89485 0.445085 0.0428084 0.084259
1 0.80625 0.508509 0.0469892 0.005556
2 0.529068 0.0906668 0.0582908 0.0954804
2 0.565625 0.0268509 0.0040625 0.0546296 
我可能得把它改成

2 0.649489 0.666668 0.0625 0.260877
4 0.89485 0.445085 0.0428084 0.084259
4 0.80625 0.508509 0.0469892 0.005556
7 0.529068 0.0906668 0.0582908 0.0954804
7 0.565625 0.0268509 0.0040625 0.0546296  
对于所有元素,这应该同时发生,仅在第一列中(不能一个接一个地替换,因为这样会对其进行错误索引)

我基本上会有一个映射
{old_class_1:new_class_1,old_class_2:new_class_2,old_class_3:new_class_3}
等等

我查看了这篇文章,但它不适用于我的案例,因为这些答案中描述的方法会将所有值更改为最后一次替换

我也研究了这个问题,但不确定这里的答案是否适用于我的案例,因为我将有大约25个类,所以索引(第一列的值)可以在0-24之间

我知道在python中可以通过逐行读取每个文件并进行替换来实现这一点,只是想知道是否有更快的方法


任何帮助都将不胜感激。谢谢

下面是一个简单的示例,说明如何将第一列中的标签映射到不同的标签

这将映射指定为变量;您也可以在文件或其他完全不同的文件中指定它。主要考虑的是,您需要有明确的分隔符,并使用一种对Awk来说不太难解析的格式

awk'BEGIN{n=split(“0:21:42:7”,m);

对于(i=1;使用Awk并不难。您尝试了什么?我没有真正尝试使用
Awk
,因为我不确定如何继续,我编辑了问题(不一定要以1为增量)