Analisando o arquivo .txt para gerar .csv

1

Eu tenho um arquivo de texto com o seguinte conteúdo

Torrent file  : Linux.Format.-.October.2016.-.True.Pdf.-.Set.1001.[ECLiPSE].torrent
Metadata info : 9968 bytes, 412 pieces, 65536 bytes per piece
Torrent name  : Linux Format - October 2016 - True Pdf - Set 1001 [ECLiPSE]
Content info  : 3 files, 26965176 bytes
Announce URL  : http://explodie.org:6969/announce

F#  Bytes       File name
--- ----------- ---------------------------------------------------------------
  1    26944026 linfor1016.pdf
  2       19963 ECLiPSE.txt
  3        1187 Read Me.txt

Torrent file  : linuxmint-13-cinnamon-dvd-64bit.iso.torrent
Metadata info : 32303 bytes, 1602 pieces, 524288 bytes per piece
Torrent name  : linuxmint-13-cinnamon-dvd-64bit.iso
Content info  : single file, 839909376 bytes
Announce URL  : http://torrents.linuxmint.com/announce.php
Torrent file  : linuxmint-13-kde-dvd-64bit.iso.torrent
Metadata info : 35938 bytes, 1784 pieces, 524288 bytes per piece
Torrent name  : linuxmint-13-kde-dvd-64bit.iso
Content info  : single file, 935329792 bytes
Announce URL  : http://torrents.linuxmint.com/announce.php
O arquivo

é gerado via

for i in *.torrent;do torrentcheck -t $i >> info.txt;done

Agora eu quero converter esse arquivo txt para que eu obtenha um arquivo csv com duas colunas , ou seja, arquivo Torrent & Informações de conteúdo (como cabeçalhos) para cada arquivo de torrent analisado por meio do comando bash acima, como:

Torrent file,Content info 
Linux.Format.-.October.2016.-.True.Pdf.-.Set.1001.[ECLiPSE].torrent,3 files, 26965176 bytes
linuxmint-13-cinnamon-dvd-64bit.iso.torrent,single file, 839909376 bytes
linuxmint-13-kde-dvd-64bit.iso.torrent,single file, 935329792 bytes

as colunas podem então ser processadas em qualquer aplicativo Spreadsheet para classificar os torrents por seu tamanho ou pelo número de arquivos neles ...

Eu posso procurar por sequências de arquivos como

grep 'Torrent file' info.txt or grep 'Content' info.txt

mas como eu jogo com as strings de texto de retorno para extrair as informações necessárias, como se eu obtivesse Torrent file : linuxmint-13-cinnamon-dvd-64bit.iso.torrent ? Eu posso usar os comandos Spreadsheet MID, LEN para reduzir a string para apenas linuxmint-13-cinnamon-dvd-64bit.iso.torrent

    
por nightcrawler 09.11.2016 / 12:56

1 resposta

2

Um script awk simples pode analisar os dados, por exemplo:

awk -F': ' 'BEGIN { print "Torrent file,Content info,Size" }
$0~/^Torrent file/ { save = $2 }
$0~/^Content info/ { printf "%s,%s\n",save,$2 }'  <info.txt

Divida as linhas em ":", salve o segundo campo de uma linha e imprima mais tarde quando a outra linha for encontrada.

    
por 09.11.2016 / 15:50