Como dividir o texto entre o separador em vários arquivos?

6

Eu tenho um arquivo de texto contendo o seguinte:

"random
textA"
"random
random
textB"

O separador é "

Como posso dividir a contenção em vários arquivos da seguinte forma usando um comando bash?

Arquivo 1:

random
textA

Arquivo 2:

random
random
textB

Eu entrei em exemplos usando csplit ou awk , mas eles não cobrem esse layout de texto.

    
por Fabio 08.12.2014 / 18:11

4 respostas

4

Comando simples awk :

awk 'NR%2==0{ print > "File "++i }' RS='"' file

RS define " como separador de registro e NR é o número do registro. Se o número do registro for módulo de 2 (porque temos outro primeiro " para registros), imprima o registro atual $0 em File # .

    
por 08.12.2014 / 22:05
3

Com o GNU awk

awk -v RS='"[[:space:]]*"' '
{sub(/^"|"[[:space:]]*$/, "");print > "output." ++n; close("output." n)}' file.txt
    
por 08.12.2014 / 18:22
3

Se a cotação de abertura estiver sempre no começo da linha, o csplit funcionará bem assim:

bash$ csplit /tmp/data '/^"/'

Isso produz arquivos chamados xx00, etc. Observe que seu exemplo remove as aspas e isso não acontece. Você precisaria de uma linha de comando sed para fazer isso:

bash$ for file in xx* ; do { sed 's/^"//;s/"$//;' ${file} >x${file}; } ; done
    
por 08.12.2014 / 18:34
2

Você pode fazer:

awk -v RS=\" -v ORS= \
  '{ sub(/^\n*/,"");sub(/\n*$/,""); };
  /^\n*$/ { next;};
  { if(strcnt==0) { print $0 >"file1"; strcnt++;} else
  { print $0 >"file2"; }; }' file
    
por 08.12.2014 / 18:38