【问题标题】:search and replace string from two lines [duplicate]从两行搜索和替换字符串[重复]
【发布时间】:2019-09-05 12:08:53
【问题描述】:

我有文件

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

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

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

【问题讨论】:

  • 你能显示整个输入的预期输出吗?

标签: shell sed grep


【解决方案1】:

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

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

【讨论】:

  • 非常好非常感谢
【解决方案2】:

请您尝试关注一下。

awk '
{
  val=index($0,":")
}
val!=0{
  line=$0
  prev_val=val
  next
}
{
  print substr(line,1,prev_val) substr(line,prev_val+1,4) substr($0,5,2) substr(line,prev_val+7) ORS $0
}
' Input_file

【讨论】:

  • @Leva,如果这对您有帮助,请您也检查一下吗?
猜你喜欢
  • 1970-01-01
  • 2012-05-05
  • 2018-01-02
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
  • 2015-10-03
相关资源
最近更新 更多