将文本连接到上一行

时间:2014-09-15 23:00:05

标签: text awk concat

目前正在使用Solaris

我需要在文本文件中搜索特定的字符串,如果找到,则将其连接到上一行。例如:

if logical condition
then
i = i + 1

会变成

if logical condition then
i = i + 1.

我确信我可以使用awk使用某种类型的保持空间来执行此操作,但我的awk技能有点生锈。


附录:道歉,我应该更具体。匹配由字符串“then”的外观触发。我不知道前一行的内容 - 它可能是任何东西。不管它是什么,我需要将“then”连接到它。

2 个答案:

答案 0 :(得分:2)

$ awk '{printf "%s%s", (NR>1?(/then/?FS:RS):""), $0} END{print ""}' file
if logical condition then
i = i + 1

答案 1 :(得分:0)

试试这个:

awk '
  function dump(trailing_line) {
    for (i = 0; i < length(previous) - 1; i++)
      print previous[i]
    if (trailing_line) { 
      print previous[i] trailing_line 
    } else { 
      print previous[i] 
    }
    i = 0
    delete previous
  }
  /then/ {
    dump(" then")
    next
  }
  {
    previous[i++] = $0
  }
  END {
    dump("")
  }
' your_input_file

如果你真的不知道then之前的内容,你必须将每一行存储到一个数组中,然后在发出then之前将它们转储出去。由于您还希望在END子句中执行此操作,因此最简单的方法是将此“转储”操作转换为函数。