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

Ubuntu пытается войти в вашу учетную запись fb, отключить Facebook в ваших учетных записях в Интернете, что должно сделать трюк

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

2 ответа

Это может быть не только начало файла, который вам нужно прочитать:

Использовать диапазон содержимого 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-записями».

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

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

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

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$   
[d29 ] То же самое!

Считывание по строке

Для получения строк вместо символов используйте -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 Content-Range не поддерживает использование диапазонов строк; HTTP-серверу необходимо будет прочитать весь файл, включая часть перед диапазоном, для подсчета номеров строк.

8
ответ дан 24 May 2018 в 06:06
  • 1
    +1 причина, по которой скрипты не должны быть интерактивными, а другие ответы требуют, чтобы пользователь ударил ctrl-c. – Tulains Córdova 1 July 2014 в 23:49
  • 2
    Примечание. Не все серверы допускают частичную загрузку. В этом случае curl -r или указание частичной загрузки не будет работать. Трубопроводы к голове, как с burl, так и с wget, работают. – Panther 2 July 2014 в 00:55

EDIT для тех, кто читает это после: Мой ответ работает, но продолжайте идти, ответы ниже лучше.

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

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

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

mkdir -p ~/Desktop/Files

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

cd ~/Desktop/Files

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

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

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

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

gedit T2014 ...

, или вы можете прочитать его в командной строке с помощью

cat T2014 ...

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

1
ответ дан 24 May 2018 в 06:06
  • 1
    Большое вам спасибо за очень быстрый ответ. И это работает очень хорошо. – Fred 1 July 2014 в 19:43

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

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