Como você dividir uma base de arquivo em um token?
-
08-07-2019 - |
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?
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.