无法在Bash中正确打印文件

时间:2018-12-31 19:55:42

标签: bash shell text

我正在尝试echo链接的内容git@gud:/home/git$ URL="https://raw.githubusercontent.com/fivethirtyeight/data/master/births/US_births_1994-2003_CDC_NCHS.csv" git@gud:/home/git$ content=$(wget $URL -q -O -) git@gud:/home/git$ echo $content 2003,12,31,3,12374_month,day_of_week,births ,它对我来说是奇怪的行为。

2003,12,31,3,12374_month,day_of_week,births

当我在浏览器中打开链接时,我希望这段代码可以打印出我看到的内容。但是,输出的整体是curl,就是这样。

下载文件后,我实际上也在本地看到了此行为。使用cat进行了尝试,只需将其复制并粘贴到文本编辑器中并保存文件即可。它们都表现出相同的行为。 cutheadtailawk甚至{{1}}也会发生同样的情况。

这在其他文件中不会发生,并且在Python上可以正常工作。我想念什么?我如何使它工作?

我意识到该文件不是以换行符结尾,但是添加文件并不能解决该问题。

我使用的是Ubuntu 18.04.1 LTS,而我使用的CLI是Bash版本4.4.19(1)。

1 个答案:

答案 0 :(得分:3)

数据文件使用Mac样式的行尾标记(仅回车)。当您echo内容或仅cat文件时,所有行都在彼此上打印。如果使用lessvim查看文件,则将看到完整的内容。

尝试一下:

$ URL="https://raw.githubusercontent.com/fivethirtyeight/data/master/births/US_births_1994-2003_CDC_NCHS.csv"
$ curl -o data.csv "$URL"

wc命令认为文件有零行:

$ wc -l data.csv
0 data.csv

现在让我们翻译这些行尾标记:

$ tr '\r' '\n' < data.csv > data-modified.csv

wc现在看到的行数更加合理:

$ wc -l data-modified.csv
3652 data-modified.csv

如果我们要整理文件:

$ cat data-modified.csv
.
.
.
2003,12,28,7,7645
2003,12,29,1,12823
2003,12,30,2,14438
2003,12,31,3,12374