您需要阅读的可能不仅仅是文件的开头:
要读取除第一个部分之外的其他部分,您可以对range使用 HTTP 请求,例如使用--range
选项curl
将文件的一部分从某个字节位置获取到另一个位置:
curl --range 500-700 ...
关于文件格式 CSV - 您会猜测哪个部分可能有用,获取该部分,然后手动编辑它以删除部分数据行。
例如,要查看从字节 50000 开始的 500 个字节/字符:
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$
Run Code Online (Sandbox Code Playgroud)
请注意第一行和最后一行是如何被截断的,因为文件的实际部分是文件的“一些文本”,而不是“一些 CSV 记录”。
常见的 Web 服务器通常支持“Range”,
但可能由于某种原因“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$
Run Code Online (Sandbox Code Playgroud)
一样!
要获取行而不是字符,请使用-n
代替-c
。
对于第 100 行到 110 行(“直到 110 行的最后 10 行”):
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,
Run Code Online (Sandbox Code Playgroud)
现在,由于 CSV 记录是行,我们有一个干净的开始和结束部分。
HTTP Content-Range 不支持使用行范围;HTTP 服务器需要读取整个文件,包括范围之前的部分,以计算行号。