Como posso converter o arquivo completo para um formato específico?

5

Eu tenho um arquivo de 1 GB e gostaria de convertê-lo em um determinado formato. O arquivo contém os seguintes URLs:

google.com
trafficinviter.com
example.com

Gostaria de converter o conteúdo completo neste formato:

"http://google.com","http://trafficinviter.com","http://example.com"

Usando o Ubuntu. Este é exatamente o formato do array PHP. Então, eu gostaria de saber como posso converter para este formato e salvar em outro arquivo.

    
por Jaffer Wilson 04.01.2017 / 11:52

3 respostas

9

Eu faria isso em Perl:

$ perl -lne 'printf "\"http://$_\","' file | sed 's/,$/\n/'
"http://google.com","http://trafficinviter.com","http://example.com"

O -l remove os caracteres de nova linha do final de cada linha (também adiciona um \n a cada print chamada e é por isso que estou usando printf ). O -ne significa "execute o script fornecido por -e em cada linha do arquivo de entrada. O próprio script imprimirá "http:// , a linha atual ( $_ ) e ", . Em seguida, o sed remove a última vírgula final.

Como alternativa, você pode fazer:

$ sed 's#^#"http://#;s#$#"#' file | tr "\n" "," | sed 's/,$/\n/'
"http://google.com","http://trafficinviter.com","http://example.com"

Aqui, o primeiro sed substituirá o início de cada linha ( ^ ) por "http:// e o final de cada linha ( $ ) por " ; o tr substitui cada caractere de nova linha por uma vírgula e o segundo sed remove a última vírgula à direita.

    
por terdon 04.01.2017 / 12:07
7

Você poderia fazer assim:

tr '\n' ',' < file | sed 's#[^,]\+#"http://&"#g;s#,$#\n#'

Explicação

  • tr '\n' ',' <file substitui as novas linhas por vírgulas em file
  • | pipe output para
  • s#[^,]\+#"http://&"#g substitui uma série de caracteres excluindo a vírgula com os mesmos caracteres prefixados por http:// e entre "citações"
  • s#,$#\n# remove a última vírgula, substitua por uma nova linha

Observação: isso falhará se os URLs tiverem vírgulas, portanto, se isso for possível no seu caso, use a resposta de terdon para resultados confiáveis

    
por Zanna 04.01.2017 / 12:15
5

Solução Awk

awk '{ printf("\"%s\",", $0) }' input.txt

O PHP permite terminar vírgulas em literais de array, se bem me lembro.

    
por David Foerster 04.01.2017 / 18:07