在模式之前在线将文件分成两部分

在模式之前在线将文件分成两部分

这是一个几乎相同的问题按照某种模式将文件分成两部分file1但在示例中不要将行设置为 XYZ file.txt

ABC
EFG
XYZ
HIJ
KNL

我想将 XYZ 包含在其中file2(但XYZ仍然是划分的模式)。我现在所拥有的是使用这个答案:https://unix.stackexchange.com/a/202516/108861然后将最后一行添加到file1顶部file2并将其删除file1,但是有没有更简单的单行解决方案?

答案1

修改起来非常容易我的解决方案对于另一个问题。只需删除next

perl -ne 'if(/XYZ/){$a=1} ; $a==1 ? print STDERR : print STDOUT;' file >f1 2>f2;

这将创造出f1一切,XYZ以及f2其他一切,包括XYZ.


或者,接受的答案从您链接到的问题来看,它已经满足了您的需求。它只保留XYZ在第一个文件中。要在第二个中使用它,只需颠倒两个awk命令:

awk '/XYZ/{out="file2"}{print >out}; ' out=file1 file

答案2

其他变体(带sed

sed '/XYZ/,${
             w file2
             d
            }' file >file1

相关内容