shell - 从两行搜索和替换字符串
问题描述
我有文件
1111:22223322
0000440000
2222:77778866
0101550101
9999:87870087
7777556666
我需要将第一行的“33”替换为第二行的“44”。数字不同但位置相同 5 和 6 在 ":" 后替换为第二行中的 5 和 6
有谁知道一个 Unix 命令(或一系列命令)来对所有行进行此操作。第 2 行的数字替换第 1 行……之后第 4 行的数字替换第 3 行……然后将它们重定向到一个新文件中?
解决方案
保存奇数行,然后在到达相应的偶数行时进行替换,在移动到下一个奇数行之前打印两行。
如果您只想打印更改的行,您可以删除print source
.
$ cat a.awk
NR % 2 == 1 { target = $0 }
NR % 2 == 0 {
source = $0;
colon_pos = index(target, ":")
new_target = substr(target, 1, colon_pos + 4) substr(source, 5, 2) substr(target, colon_pos + 7)
print new_target
print source
}
$ awk -f a.awk file > new_file
$ cat new_file
1111:22224422
0000440000
2222:77775566
0101550101
9999:87875587
7777556666
推荐阅读
- swift - 从哈希值计算中省略一个属性
- ios - 内存增加但在关闭时不释放 [Mapbox]
- python - 在带有类方法的 Pandas 中使用 pipe()?
- .net-core - 构造表达式树以调用 IQueryable 集合上的 Any 方法(嵌套查询)
- json - 如果可能,将数据与正则表达式匹配并反向前瞻
- python - 如何使用 Keras 进行预测
- python - 在 python 中使用 scipy.optimize.minimine 的问题
- jenkins - 通过 UI 提供的 jenkins 管道的配置存储在哪个文件中?
- java - 等待响应式更改流订阅在 Spring Data MongoDB 中处于活动状态?
- reactjs - React Material UI 自定义输入隐藏/显示密码