【发布时间】:2020-10-18 15:01:42
【问题描述】:
我正在尝试解析一个文件,以便获得第一列。我正在使用的命令是:
while IFS=',' read -r a; do echo "$a"; done < test.csv
但是它仍然输出整个 csv 而不是第一列。 csv的一个例子如下:
NOM,CODI,DATA,SEXE,GRUP_EDAT,RESIDENCIA,CASOS_CONFIRMAT,PCR,INGRESSOS_TOTAL,INGRESSOS_CRITIC,INGRESSATS_TOTAL,INGRESSATS_CRITIC,EXITUS
MOIANÃS,42,24/08/2020,Home,Majors de 74,No,0,2,0,0,0,0,0
ALT CAMP,01,30/07/2020,Dona,Entre 15 i 64,Si,0,0,0,0,0,0,0
ALT CAMP,01,30/07/2020,Dona,Entre 65 i 74,No,0,1,0,0,0,0,0
ALT CAMP,01,30/07/2020,Dona,Entre 65 i 74,Si,0,0,0,0,0,0,0
我一直在寻找其他地方,似乎所有人都同意这应该是使用 IFS 解析 csv 时的正确方法。我注意到的一件事是,如果我向 read 函数添加一个新列,比如 b,它会输出第一列而不是所有内容。
while IFS=',' read -r a b; do echo "$a"; done < test.csv
我不理解这种行为,而且它似乎没有比打印第一列更有效。例如,如果我将 c 和 $c 放在一起,它就不会打印第三列等等。
您能否解释一下这种行为以及为什么会发生这种情况?
谢谢
【问题讨论】:
-
您应该阅读
read命令的说明。 linuxcommand.org/lc3_man_pages/readh.html -
如果您的数据已被 MS-Windows 机器访问,请与
cat -vet file | head -10联系。如果您在每行末尾看到^M$,则使用dos2unix file将您的文件转换为*nix 格式。祝你好运。