使用命令行中的 URL 读取大量在线 CSV 文件的一部分

使用命令行中的 URL 读取大量在线 CSV 文件的一部分

在我下载大型在线 CSV 文件之前,有没有什么方法可以让我使用它的 URL 从命令行读取几行内容?

答案1

您需要阅读的可能不仅仅是文件的开头:

使用HTTP 内容范围

读书其他部分除了第一个之外,你可以使用 HTTP 请求范围,例如使用 选项--rangecurl将文件的一部分从某个字节位置移到另一个字节位置:

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$   

注意第一行和最后一行隔断,因为文件的实际部分只是文件的“一些文本”,而不是“一些 CSV 记录”。

当不支持 Range 时

常见的 Web 服务器一般都支持“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$   

一樣!

按行阅读

要获取行而不是字符,请使用-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,

现在,由于 CSV 记录是行,我们有一个干净的部分的开始和结束。

HTTP Content-Range 不支持使用行范围;HTTP 服务器需要读取整个文件(包括范围之前的部分)来计算行数。

答案2

比@musher 的方法稍微快一点:

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

将会O把结果输出到终端的标准输出,而该q选项会抑制有关下载进度等的内容。您必须相当快地按下Ctrl+C才能停止下载,因为它是文本,所以它会相当快地下载。

可能也可以工作 - 它应该将前十行下载到标准输出:

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

为任何读过这篇文章的人编辑:我的答案有效,但继续下去,下面的答案更好。

因此,如果您右键单击可以选择的数据集的实际链接Copy link address(在 chrome 中,我假设在 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 ... 文件。

相关内容