Pergunta

Vamos dizer que você tem um arquivo contendo textos (de 1 a N) separados por um $ Como um pode cortar o arquivo de modo que o resultado final é N arquivos?

text1 com novas linhas $
text2 $ etc ... $
textN

Estou pensando em algo com awk ou sed mas existe qualquer app unix disponíveis que já realizam esse tipo de tarefa?

Foi útil?

Solução

Talvez split -p padrão ?

Hmm. Isso pode não ser exatamente o que você quer. Não dividir uma linha, ela só começa um novo arquivo quando vê o padrão. E parece ser suportado apenas em sistemas relacionados-BSD.

Você pode usar algo como:

awk 'BEGIN {RS = "$"} { ... }'

Editar: Você pode encontrar alguma inspiração para a parte { ... } aqui:

http://www.gnu.org/manual/gawk /html_node/Split-Program.html

edit:. Graças ao comentário do dmckee, mas csplit também parece copiar a linha inteira em que ocorre o padrão

Outras dicas

awk 'BEGIN {RS = "$"; ORS = ""} {TextoNUMBER ++; print $ 0> "texto" TextoNUMBER ".out"}' filename

Graças a Bill Karwin para a idéia.

Edit:. Adicione os ORS = "" para evitar a impressão de uma nova linha no final de cada arquivos

Se eu estou lendo esse direito, o UNIX comando corte pode ser usado para isso.

cut -d $ -f 1- filename

Eu poderia ter a sintaxe um pouco fora, mas que deve dizer corte que você está usando campos $ separadas e retornar campos 1 até o final.

Você pode precisar escapar do $.

awk -vRS="$" '{ print $0 > "text"t++".out" }' ORS="" file

usando o comando de divisão podemos dividir usando cordas.

mas o comando csplit lhe permitirá arquivos de fenda baseando-se em expressões regulares também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top