我有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中的文本?提前谢谢。
答案 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中的行。