Leia uma parte do enorme arquivo CSV on-line usando sua URL na linha de comando

1

Existe alguma maneira que eu possa ler algumas linhas de um enorme arquivo CSV online usando sua URL da linha de comando antes de baixá-lo?

    
por Fred 01.07.2014 / 15:57

3 respostas

3

Um pouco mais rápido do que @ musher's seria fazer isso:

wget http://datagov.ic.nhs.uk/presentation/2014_03_March/T201403PDPI+BNFT.CSV -qO - 

O O produzirá os resultados para stdout no terminal, enquanto a opção q suprime coisas sobre o download do progresso, etc. Você teria que pressionar Ctrl + C rapidamente para parar o download, porque como é texto, ele será baixado rapidamente.

Isso pode também funcionar - ele deve fazer o download para stdout das dez primeiras linhas:

wget http://datagov.ic.nhs.uk/presentation/2014_03_March/T201403PDPI+BNFT.CSV -qO - | head -10

Ele deve ficar bem, desde que o wget pare de fazer o download depois que as primeiras 10 linhas tiverem passado por head ... Eu verifiquei e wget pare de fazer o download após as primeiras 10 linhas terem sido lidas.
Edit: O comando wget será fechado pelo sinal SIGPIPE - veja aqui

Você pode alterar o número de linhas lidas alterando o número após head -

    
por Wilf 01.07.2014 / 16:29
8

Pode não ser apenas o começo do arquivo que você precisa ler:

Use Intervalo de conteúdo HTTP

Para ler outras partes do primeiro, você pode usar uma solicitação HTTP para intervalo , por exemplo, com a opção --range de curl , para obter uma parte do arquivo de alguma posição de byte para outra:

curl --range 500-700 ...


Com relação ao formato de arquivo CSV, você poderia adivinhar qual parte poderia ser útil, obter essa parte e editá-la manualmente para remover linhas parciais de dados.

Por exemplo , para dar uma olhada nos 500 bytes / caracteres a partir do byte 50000:

URL="http://datagov.ic.nhs.uk/presentation/2014_03_March/T201403PDPI+BNFT.CSV" e curl --range 50000-50500 "$URL"

2.79,0000030,201403,                  
Q44,RXA,Y00327,1108010F0AAABAB,Hypromellose_Eye Dps 0.5%               ,0000001,00000000.81,00000000.76,0000010,201403,                  
Q44,RXA,Y00327,110801000BLAPA0,Blephasol_Lot                           ,0000001,00000007.53,00000006.97,0000100,201403,                  
Q44,RXA,Y00327,110801000BLAQA0,Blephaclean_Eye Lid Wipe                ,0000001,00000010.68,00000009.89,0000040,201403,                  
Q44,RXA,Y00327,1201010F0BBAAAA,Locorten-Viof$   

Observe como a primeira e a última linha são cortadas , já que a parte real do arquivo era "apenas algum texto" do arquivo, e não "alguns registros CSV".

Quando o intervalo não é suportado

Servidores Web comuns suportam "Intervalo" em geral,
mas é possível que por algum motivo "Range" não esteja funcionando
(por exemplo, não é suportado por um servidor personalizado ou não funciona porque existe um proxy entre eles)

Neste caso, não podemos evitar fazer o download dos dados antes da parte em que estamos interessados. Mas, então, podemos cortar a parte que precisamos, por bytes ou por linhas:

URL="http://datagov.ic.nhs.uk/presentation/2014_03_March/T201403PDPI+BNFT.CSV" e curl -s "$URL" | head -c 50500 | tail -c 500

2.79,0000030,201403,                  
Q44,RXA,Y00327,1108010F0AAABAB,Hypromellose_Eye Dps 0.5%               ,0000001,00000000.81,00000000.76,0000010,201403,                  
Q44,RXA,Y00327,110801000BLAPA0,Blephasol_Lot                           ,0000001,00000007.53,00000006.97,0000100,201403,                  
Q44,RXA,Y00327,110801000BLAQA0,Blephaclean_Eye Lid Wipe                ,0000001,00000010.68,00000009.89,0000040,201403,                  
Q44,RXA,Y00327,1201010F0BBAAAA,Locorten-Viof$   

Da mesma forma!

Lido por linha

Para obter linhas, em vez de caracteres, use -n em vez de -c .
Para as linhas 100 a 110 ("as últimas 10 linhas das linhas até 110"):

URL="http://datagov.ic.nhs.uk/presentation/2014_03_March/T201403PDPI+BNFT.CSV" e curl -s "$URL" | head -n 110 | tail -n 10

Q44,RXA,Y00327,0206030Y0AAAAAA,Ivabradine_Tab 5mg                      ,0000001,00000020.09,00000018.68,0000028,201403,                  
Q44,RXA,Y00327,0208010W0AAAIAI,Tinzaparin Sod_Inj 20 000u/ml 0.7ml Pfs ,0000003,00000154.77,00000143.20,0000013,201403,                  
Q44,RXA,Y00327,0208010W0AAANAN,Tinzaparin Sod_Inj 10 000u/ml 2ml Vl    ,0000001,00000021.13,00000019.65,0000002,201403,                  
Q44,RXA,Y00327,0208020V0AAAAAA,Warfarin Sod_Tab 1mg                    ,0000002,00000001.34,00000001.37,0000042,201403,                  
Q44,RXA,Y00327,0209000A0AAAJAJ,Aspirin_Tab 75mg                        ,0000001,00000000.12,00000000.22,0000004,201403,                  
Q44,RXA,Y00327,0211000P0AAACAC,Tranexamic Acid_Tab 500mg               ,0000001,00000006.31,00000005.85,0000060,201403,                  
Q44,RXA,Y00327,0212000Y0AAADAD,Simvastatin_Tab 40mg                    ,0000001,00000000.17,00000000.27,0000004,201403,                  
Q44,RXA,Y00327,0301011R0AAAPAP,Salbutamol_Inha 100mcg (200 D) CFF      ,0000037,00000058.50,00000054.54,0000039,201403,                  
Q44,RXA,Y00327,0301011R0BEAIAP,Ventolin_Evohaler 100mcg (200 D)        ,0000014,00000021.00,00000019.59,0000014,201403,                  
Q44,RXA,Y00327,0301011V0BBAMAL,Bricanyl_Turbohaler 500mcg (100 D)      ,0000001,00000006.92,00000006.41,0000001,201403,

Agora, como os registros CSV são linhas, temos um começo e um fim limpos da seção.

O intervalo de conteúdo HTTP não suporta o uso de intervalos de linha; O servidor HTTP precisaria ler o arquivo inteiro, incluindo a parte antes do intervalo, para contar números de linha.

    
por Volker Siegel 01.07.2014 / 16:20
1

EDIT para quem lê isto depois: Minha resposta funciona, mas continue, as respostas abaixo são melhores.

Então, se você clicar com o botão direito nos links reais dos conjuntos de dados, poderá escolher Copy link address (no chrome, suponho opções semelhantes no Firefox / outros)

O conselho mais fácil que posso dar para olhar a linha superior é:

Abra um terminal e crie um diretório para seus arquivos (vou colocá-lo na área de trabalho e chamá-lo de arquivos)

mkdir -p ~/Desktop/Files

Agora, entre nesse diretório.

cd ~/Desktop/Files

agora, usando o link que você copiou acima ( ctrl desloca V para colá-lo no terminal) digite

wget http://datagov.ic.nhs.uk/presentation/2014_03_March/T201403PDPI+BNFT.CSV

(esse é o primeiro link na página, para sua referência).

Agora, para verificar se é o que você quer, clique em ctrl C para parar a transferência de arquivos (o wget procura o arquivo naquele local, a URL e os downloads Isso interrompe a transferência). Uma vez parado, use seu editor de texto favorito para abri-lo via

gedit T2014 ...

ou você pode lê-lo na linha de comando com

cat T2014 ...

Se for o que você quer, apenas execute novamente o comando wget e deixe-o terminar. Se não, você pode remover com segurança o arquivo T2014 ...

    
por Mitch 01.07.2014 / 16:11