Text 将文本连接到上一行
目前正在Solaris上工作 我需要在一个文本文件中搜索一个特定的字符串,如果找到了,将它连接到前一行。例如:Text 将文本连接到上一行,text,awk,concat,Text,Awk,Concat,目前正在Solaris上工作 我需要在一个文本文件中搜索一个特定的字符串,如果找到了,将它连接到前一行。例如: if logical condition then i = i + 1 将成为 if logical condition then i = i + 1. 我相信我可以用awk来做这件事,但我的awk技能有点生疏了 附录:抱歉,我应该说得更具体些。匹配由字符串“then”的出现触发。我不知道前一行的内容——可能是任何内容。无论它是什么,我都需要将“then”连接到它。尝试以下方法:
if logical condition
then
i = i + 1
将成为
if logical condition then
i = i + 1.
我相信我可以用awk来做这件事,但我的awk技能有点生疏了
附录:抱歉,我应该说得更具体些。匹配由字符串“then”的出现触发。我不知道前一行的内容——可能是任何内容。无论它是什么,我都需要将“then”连接到它。尝试以下方法:
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
awk'
函数转储(尾随_行){
对于(i=0;i
如果您确实不知道
then
之前的内容,则必须将每一行存储到一个数组中,然后在发出then
之前将其转储。由于您还希望在END
子句中执行此操作,因此将此“转储”操作转换为函数是最简单的。这让我走了一半。你能解释一下我如何添加一个“else打印行”,这样我就可以得到文本文件的全部内容以及转换后的行吗?这可能是最好的。当我听到Solaris时,我只是害怕得发抖<代码>:)它在Solaris上可以很好地使用任何不旧的、损坏的awk,即nawk或/usr/xpg4/bin/awk。希望OP已经知道了这一点,否则我们可以期待“第1行的语法错误”,这是老破烂的awk喜欢为几乎每个awk脚本吐出来的@杰帕尔/你/恐惧中的地震?替我想想。锁定。不能使用任何FOSS,不能使用sunfreeware.com。获得任何信息都是由委员会决定的@Ed Morton-谢谢Ed-非常感谢。使用/usr/xpg4/bin/awk非常有效。
$ awk '{printf "%s%s", (NR>1?(/then/?FS:RS):""), $0} END{print ""}' file
if logical condition then
i = i + 1