linux - 如何在Linux中用不同的文本/值替换某一列中的一定数量的行值/文本?
问题描述
我有一个文件,其中有一列(图片中的 5),里面填满了 X。我需要用不同的字母替换那些 X。但是,我需要该列中的一定数量的行是相同的字母,然后另一组行是另一个字母,依此类推。示例如第二张图片所示。为了更清楚,我需要第 2-10 行在第 5 列中包含字母 A,第 11-20 行到字母 B,第 21-30 行中包含字母 C,依此类推。有没有办法在Linux中通过提供行/行范围和我想要的字母来替换文件中的那些X,但不保存到新文件中?我需要一种比手动更快的方法,因为我在文件中有超过一百万行,并且我有大约 5,000 个文件要更改。
我有的
我需要的
解决方案
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
推荐阅读
- c# - 列表视图的背景选择项
- bash - 尝试大写第一个字母时 Bash 错误替换
- nginx - nginx 使用 IP 和本地名称将流量定向到非域名
- browser - 某些表示形式中的 Unicode 字符问题
- sql - 一张表中的两个唯一键 SQL
- r - 在两个数据集之间匹配列表中的值
- django - Django Orm,包括像 asp.net core 这样的功能
- regex - 如何在电子表格中替换 =textjoin 范围的值
- ios - 在每个单元格都包含表格视图的表格视图中选择新单元格时,无法取消选择先前选择的单元格
- selenium - XPath 中 contains 和 equals 的区别 - selenium