我有一个巨大的文本文件(~1.5GB),其中有许多行以“.Ends”结尾。
我需要一个Linux oneliner(perl\ awk\ sed)来查找文件中最后一个出现的“.Ends”位置,并添加几行在其之前。
我尝试使用
当我使用:
它首先打印“someline\n”,然后才打印.Ends
结果是:
…
.Ends
someline 当我使用:
它什么也不打印。
当我使用:
它会将所有内容打印两次:
…
.Ends
someline
.Ends
是否有一种平稳的方法来执行此编辑?
不必遵循我的解决方向,我不挑剔...
奖励-如果这些行可以来自另一个文件,那就太好了(但确实不是必须的)。
编辑
测试输入文件:
我需要一个Linux oneliner(perl\ awk\ sed)来查找文件中最后一个出现的“.Ends”位置,并添加几行在其之前。
我尝试使用
tac
两次,并卡在我的perl上:当我使用:
tac ../../test | perl -pi -e 'BEGIN {$flag = 1} if ($flag==1 && /.Ends/) {$flag = 0 ; print "someline\n"}' | tac
它首先打印“someline\n”,然后才打印.Ends
结果是:
…
.Ends
someline 当我使用:
tac ../../test | perl -e 'BEGIN {$flag = 1} print ; if ($flag==1 && /.Ends/) {$flag = 0 ; print "someline\n"}' | tac
它什么也不打印。
当我使用:
tac ../../test | perl -p -e 'BEGIN {$flag = 1} print $_ ; if ($flag==1 && /.Ends/) {$flag = 0 ; print "someline\n"}' | tac
它会将所有内容打印两次:
…
.Ends
someline
.Ends
是否有一种平稳的方法来执行此编辑?
不必遵循我的解决方向,我不挑剔...
奖励-如果这些行可以来自另一个文件,那就太好了(但确实不是必须的)。
编辑
测试输入文件:
gla2
fla3
dla4
rfa5
.Ends
shu
sha
she
.Ends
res
pes
ges
.Ends
--->
...
pes
ges
someline
.Ends
# * some irrelevant junk * #
.Ends
之后可能还有其他行,并且在示例中也没有包含最后一个.Ends
之后的行,则试图帮助您的人可能会合理地创建和测试依赖于.Ends
是最后一行的解决方案,从而浪费他们的时间,对您的影响则相对较小。 - Ed Morton