awk - 在保留空格的同时替换特定列和行范围中的字符串
问题描述
我想知道是否有一种简单的方法使用 sed 或 awk 将特定列中的字符串和多行中的字符串替换为另一个字符串。该字符串在其他列中重复,但我希望替换特定列中的字符串,同时保留列之间不一致的空格数。例如,我希望将第 3 列第 2-4 行中的“A”替换为“B”,同时在列之间保留相同的空格。
1 2 A 4 A B C A E F G 7 8 9
2 11 A 4 A B C A E F G 7 8 9
3 12 A 4 A B C A E F G 7 8 9
4 13 A 4 A B C A E F G 7 8 9
5 14 A 4 A B C A E F G 7 8 9
6 15 A 4 A B C A E F G 7 8 9
.
.
至
1 2 A 4 A B C A E F G 7 8 9
2 11 B 4 A B C A E F G 7 8 9
3 12 B 4 A B C A E F G 7 8 9
4 13 B 4 A B C A E F G 7 8 9
5 14 A 4 A B C A E F G 7 8 9
6 15 A 4 A B C A E F G 7 8 9
.
.
谢谢!
解决方案
您必须为行范围添加条件,在您必须执行的操作之前,NR
是记录号,通常是行号。
awk 'NR>=2 && NR<=4{sub("A","B",$3)} 1' file
1 2 A 3
2 3 B 4
3 4 B 5
4 5 B 6
5 6 A 7
1
最后意味着执行默认操作,即对print
每一行。也是GNU Awk 字符串函数sub
之一。
更新
$0
对于您更新的要求,在不拆分到字段的情况下进行替换将起作用。这也sub
只替换了第一次出现的A
in line。
awk 'NR>=2 && NR<=4{sub("A","B",$0)} 1' file
推荐阅读
- c++ - 使用迭代器修改二维向量
- ruby-on-rails - RAILS - 使用 GROVER 从 HTML 生成 PDF
- listview - Delphi - 虚拟模式下的 TListView 问题
- colors - 使用openCV在模糊颜色边界处画一条直线
- bash - 如何在 shell 脚本中停止一个进程并转到下一个进程?
- flutter - Flutter BLoC 复杂列表产生 ErrorState
- angular - 如何在模块组件中使用 ngx-translate?
- c# - Razor Html.DropDownListFor 自动设置选中值
- flutter - 颤振包返回jcenter 403 Forbidden
- java - 拼图 65-java 益智游戏。int 溢出可能发生在涉及负数减法、int.Max_Value 等的计算中你如何避免它?