Прочитайте часть массивного онлайн-файла CSV, используя его URL из командной строки

Можно ли как-нибудь прочитать несколько строк массивного онлайн-файла CSV, используя его URL из командной строки, прежде чем я собираюсь его скачать?

1
задан 2 July 2014 в 03:48

3 ответа

Немного более быстрое, чем @musher должно было бы сделать это:

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

Эти O произведет результаты к stdout в терминале, в то время как q опция подавляет материал о загрузке прогресса и т.д. Необходимо было бы нажать Ctrl + C справедливо быстро для остановки его загрузка, потому что, поскольку это - текст, который это загрузит справедливо быстро.

Это могло бы также работа - она должна загрузить на stdout первые десять строк:

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

Это должно быть прекрасно, целый wget прекращает загружать после первого 10 строки прошли head... Я проверил, и wget, кажется, прекращает загружать после того, как первые 10 строк были считаны.
Редактирование: команда wget будет закрыта сигналом SIGPIPE - видят здесь

, можно изменить количество строк, считанных путем изменения числа после head -

3
ответ дан 2 July 2014 в 03:48

Это может быть не только начало файла, который необходимо считать:

Используйте Довольный Диапазон HTTP

Для чтения других частей, чем первое Вы могли использовать Запрос HTTP для диапазона, например, с --range опция curl, получить часть файла от некоторого положения байта до другого:

curl --range 500-700 ...


Относительно формата файла CSV - Вы предположили бы, какая часть могла быть полезной, получить ту часть и отредактировать ее вручную для удаления частичных строк данных.

Например, для взгляда на 500 байтов/символы, начинающих с байта 50000:

URL="http://datagov.ic.nhs.uk/presentation/2014_03_March/T201403PDPI+BNFT.CSV"
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$   

Отметьте, как первая и последняя строка отключена, поскольку фактическая часть файла была "просто некоторым текстом" файла, не "некоторыми записями CSV".

Когда Диапазон не поддерживается

Общие веб-серверы поддерживают "Диапазон" в целом,
но возможно, что по некоторым причинам "Диапазон" не работает
(например, это не поддерживается пользовательским сервером, или это не работает, потому что существует промежуточный прокси),

В этом случае мы не можем постараться не загружать данные перед частью, которой мы интересуемся. Но затем, мы можем отключить часть, в которой мы нуждаемся байтами, или строками:

URL="http://datagov.ic.nhs.uk/presentation/2014_03_March/T201403PDPI+BNFT.CSV"
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$   

Все равно!

Читайте с методической точностью

Получить строки, вместо символов, использования -n вместо -c.
Для строк 100 - 110 ("последние 10 строк строк до 110"):

URL="http://datagov.ic.nhs.uk/presentation/2014_03_March/T201403PDPI+BNFT.CSV"
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,

Теперь, поскольку записи CSV являются строками, у нас есть чистый запуск и конец раздела.

Довольный Диапазон HTTP не поддерживает диапазоны строки использования; сервер HTTP должен был бы считать целый файл, включая часть перед диапазоном, для подсчета номеров строки.

8
ответ дан 2 July 2014 в 03:48

РЕДАКТИРОВАНИЕ для любого читающего это после: Мои работы ответа, но продолжают идти, ответы ниже лучше.

Таким образом, при щелчке правой кнопкой по фактическим ссылкам для наборов данных, можно выбрать Copy link address (в хроме я принимаю подобные опции в Firefox/других),

Самый легкий совет, который я могу дать взгляду наверху, немногие выравнивают, это:

Откройте терминал и сделайте каталог для Ваших файлов (я помещу его на Рабочий стол и назову его Файлами),

mkdir -p ~/Desktop/Files

Теперь, войдите в тот каталог..

cd ~/Desktop/Files

теперь, с помощью ссылки, которую Вы скопировали сверху (ctrlshiftV для вставки его в терминал) тип

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

(это - первая ссылка на странице для Вашей ссылки).

Теперь, проверить, что это - то, что Вы хотите просто, чтобы хит ctrlC остановил передачу файлов (wget ищет файл в том местоположении, URL, и загружает его. Это останавливает передачу). После того как это остановилось, используют Ваш любимый текстовый редактор для открытия его через

gedit T2014 ...

или можно считать его на командной строке с

cat T2014 ...

Если это - то, что Вы хотите, просто повторно выполняете команду wget и позволяете ей закончиться. В противном случае можно безопасно удалить T2014... файл.

1
ответ дан 2 July 2014 в 03:48

Другие вопросы по тегам:

Похожие вопросы: