首页 > 解决方案 > 从两行搜索和替换字符串

问题描述

我有文件

1111:22223322
0000440000
2222:77778866
0101550101
9999:87870087
7777556666

我需要将第一行的“33”替换为第二行的“44”。数字不同但位置相同 5 和 6 在 ":" 后替换为第二行中的 5 和 6

有谁知道一个 Unix 命令(或一系列命令)来对所有行进行此操作。第 2 行的数字替换第 1 行……之后第 4 行的数字替换第 3 行……然后将它们重定向到一个新文件中?

标签: shellsedgrep

解决方案


保存奇数行,然后在到达相应的偶数行时进行替换,在移动到下一个奇数行之前打印两行。

如果您只想打印更改的行,您可以删除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

推荐阅读