Dividir arquivo em dois on-line antes do padrão

1

Essa é uma pergunta quase idêntica ao arquivo dividido em dois partes, em um padrão , mas em vez de ter as linhas até XYZ em file1 no exemplo file.txt :

ABC
EFG
XYZ
HIJ
KNL

Eu quero que o XYZ seja incluído em file2 (mas XYZ ainda é o padrão para dividir). O que eu tenho agora é usar esta resposta: link e, em seguida, adicionar a última linha de file1 ao topo da file2 e removendo-o de file1 , mas existe uma solução mais fácil de uma linha?

    
por Niek de Klein 08.09.2015 / 16:03

2 respostas

3

É muito fácil modificar minha solução para a outra pergunta. Basta remover o next :

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

Isso criará f1 com tudo até XYZ e f2 com todo o resto, incluindo XYZ .

Como alternativa, a resposta aceita da pergunta à qual você se vinculou faz praticamente o que você precisa. Apenas mantém XYZ no primeiro arquivo. Para tê-lo no segundo, basta inverter os dois comandos awk :

awk '/XYZ/{out="file2"}{print >out}; ' out=file1 file
    
por 08.09.2015 / 16:10
1

Outra variante (com sed )

sed '/XYZ/,${
             w file2
             d
            }' file >file1
    
por 08.09.2015 / 17:58