目前正在使用Solaris
我需要在文本文件中搜索特定的字符串,如果找到,则将其连接到上一行。例如:
if logical condition
then
i = i + 1
会变成
if logical condition then
i = i + 1.
我确信我可以使用awk使用某种类型的保持空间来执行此操作,但我的awk技能有点生锈。
附录:道歉,我应该更具体。匹配由字符串“then”的外观触发。我不知道前一行的内容 - 它可能是任何东西。不管它是什么,我需要将“then”连接到它。
答案 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
子句中执行此操作,因此最简单的方法是将此“转储”操作转换为函数。