awk在2个特定行之前插入文件中的文本

时间:2015-03-27 09:03:46

标签: awk

我有2个文件,file1和file2。

# cat /tmp/file1
***** insert new text ****

# cat /tmp/file2

</table>
some text
</table>
<table name="test" description="test line">
some text

我想将文件从file1插入到file2中,但只能在以下两行之前插入:

</table>
<table name="test" description="test line">

所以最终的结果是:

</table>
some text
*** insert new text ****
</table>
<table name="test" description="test line">
some text

这是我正在尝试的awk语句/命令,但问题是awk是为每个匹配插入新文本。

# f1="$(</tmp/file1)"
# awk -vf1="$f1" '/<\/table>/,/<table name="test" description="test line">/{print f1;print;next}1' /tmp/file2

***** insert new text ****
</table>
***** insert new text ****
some text
***** insert new text ****
</table>
***** insert new text ****
<table name="test" description="test line">
some text

如何修复awk语句只在这些特定的2行之前插入file1中的文本?提前谢谢。

1 个答案:

答案 0 :(得分:2)

这对我有用:

awk '{if(p=="</table>"&&$0=="<table name=\"test\" description=\"test line\">")
{system("cat file1");}if(p){print p}; p=$0}END{print $0}' file2

if语句检查当前行是否与<table...>和前一行</table>匹配。如果是,则打印file1的内容,否则打印文件2中的行。