Dividir e adicionar sufixo e prefixo ao conteúdo do arquivo

4

Estou tentando 3 coisas.
1 # divide o arquivo em pequenos pedaços | 2 # ao dividir Eu preciso adicionar algum texto para o início de cada arquivo dividido. 3 # Eu preciso adicionar algum texto ao final do arquivo de cada arquivo dividido.

Eu tenho um arquivo de 2 GB no qual preciso executar operações. Aqui está o pequeno pedaço da amostra do arquivo que eu tenho. Por favor, dividir este arquivo como por 10 linhas cada.
Exemplo do arquivo bruto em que a operação precisa ser feita: link
Eu quero fazer cada arquivo dividido como um arquivo php. Aqui está um exemplo do arquivo php: link
Eu só preciso dos arquivos recém-divididos para serem arquivos PHP e eles devem ficar assim:

<?php
$urls = array("tvproduction.agency
","http://tween.agency","http://twelve.agency","http://twenty1.agency
","http://twenty47.agency
","http://twentynine.agency
","http://twentyone.agency
","http://twentysenses.agency
","http://twentysix.agency
","http://twentyten.agency");
?>

Eu tentei split , mas ele apenas dividiu o arquivo.

    
por Jaffer Wilson 04.01.2017 / 18:38

2 respostas

3

Embora a pergunta pareça totalmente clara, o (s) exemplo (s) não são totalmente claros para mim. Por isso, continuarei com a descrição da questão.

Dividindo um arquivo em partes iguais, adicionando prefixo e sufixo

O script abaixo fará exatamente o que você descreve; vai:

  • divida o arquivo em partes iguais (número de linhas)
  • adicione um prefixo (como primeira linha)
  • adiciona um sufixo (como última linha

Além disso:

  • os arquivos serão nomeados:

    split_1, split_2, split_3
    

    etc.

  • Todos os arquivos serão criados no diretório de trabalho do script

Um exemplo

Um arquivo como:

aap
noot
mies
wim
zus
jet
teun
vuur
gijs
aardappel
pinda
aap
noot
mies
wim
...

será dividido, como:

something_before
aap
noot
mies
wim
zus
jet
teun
vuur
gijs
aardappel
something_after

etc

O script

#!/usr/bin/env python3

# --- set the file, the prefix , suffix and chunksize below
f = "/home/jacob/Bureaublad/test"
prefix = "something_before"
suffix = "something_after"
chunksize = 10

# --- don't change anything below
n = 1
nfile = 1

with open(f) as read:
    for l in read:
        if (n-1) % chunksize == 0:
            s = prefix+"\n"; a = ""
        elif n%chunksize == 0:
            a = suffix; s = ""
        else:
            a = ""; s = ""
        open("split_"+str(nfile), "a+").write(s+l+a)
        if n%chunksize == 0:
            nfile += 1    
        n += 1
# add the suffix to the last file if it is "incomplete"
last = suffix if a == "" else ""
open("split_"+str(nfile), "a+").write(last)

Como usar

  1. Copie o script em um arquivo vazio, salve-o como split_chunks.py
  2. Na seção head do script, defina o caminho para o arquivo grande, o prefixo, sufixo e chunksize (número de linhas para dividir)

    # --- set the file, the prefix , suffix and chunksize below
    f = "/home/jacob/Bureaublad/test"
    prefix = "something_before"
    suffix = "something_after"
    chunksize = 10
    
  3. Execute o script com o comando:

    python3 /path/to/split_chunks.py
    

Explicação

... seguirá, precisa dormir:)

    
por Jacob Vlijm 04.01.2017 / 23:56
3

É um pouco complicado obter a cotação correta (eu acho porque split invoca bash - c ' ... ' em segundo plano), mas versões recentes do GNU split fornecem um comando --filter que deve permitir que você faça isso - por exemplo, usando sed

split -l 10 --filter='sed -e '\''1i\header text'\'' -e '\''$a\footer text'\'' > $FILE' file

ou (ainda mais simples), com printf

split -l 10 --filter='{ printf "header text\n"; cat - ; printf "footer text\n"; } > $FILE' file

Para ilustrar, dado file gerado como

printf '%03d\n' {1..100} > file

i.e. linhas que consistem em números de 001 a 100 e, em seguida,

split -l 10 --filter='{ 
  printf "header line 1\nheader line 2\n"
  cat - 
  printf "footer line 1\nfooter line 2\n"
  } > $FILE' file

dando arquivos de saída

$ ls xa?
xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj

com por exemplo

$ cat xad
header line 1
header line 2
031
032
033
034
035
036
037
038
039
040
footer line 1
footer line 2
    
por steeldriver 04.01.2017 / 19:07