首页 > 解决方案 > 如何在Linux中用不同的文本/值替换某一列中的一定数量的行值/文本?

问题描述

我有一个文件,其中有一列(图片中的 5),里面填满了 X。我需要用不同的字母替换那些 X。但是,我需要该列中的一定数量的行是相同的字母,然后另一组行是另一个字母,依此类推。示例如第二张图片所示。为了更清楚,我需要第 2-10 行在第 5 列中包含字母 A,第 11-20 行到字母 B,第 21-30 行中包含字母 C,依此类推。有没有办法在Linux中通过提供行/行范围和我想要的字母来替换文件中的那些X,但不保存到新文件中?我需要一种比手动更快的方法,因为我在文件中有超过一百万行,并且我有大约 5,000 个文件要更改。

我有的

我有的

我需要的

我需要的

标签: linuxubuntu

解决方案


awk '{ match($0,$5);printf "%s%c%s\n",substr($0,1,RSTART-1),64+$6,substr($0,RSTART+RLENGTH) }' file

使用 awk,使用 match 函数查找第 5 个空格分隔字段的起始位置。然后我们将行的开头打印到第 5 个字段,字符代码 64 + 第 6 个分隔字段,然后是字段的其余部分。

使用的样本:

ATOM    1 CA HIE X 1    105.967 123.567 112.345 0.00    0.00
ATOM    1 CA HIE X 2    105.967 123.567 112.345 0.00    0.00
ATOM    1 CA HIE X 3    105.967 123.567 112.345 0.00    0.00

输出:

ATOM    1 CA HIE A 1    105.967 123.567 112.345 0.00    0.00
ATOM    1 CA HIE B 2    105.967 123.567 112.345 0.00    0.00
ATOM    1 CA HIE C 3    105.967 123.567 112.345 0.00    0.00

推荐阅读