首页 > 解决方案 > IFS 不能很好地解析 CSV

问题描述

我正在尝试解析文件,以便获得第一列。我正在使用的命令是:

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 时的正确方法。我注意到的一件事是,如果我向读取函数添加一个新列,比如 b,它会输出第一列而不是所有内容。

while IFS=',' read -r a b; do echo "$a"; done < test.csv

我不理解这种行为,它似乎并没有比打印第一列更有效。例如,如果我将 c 和 $c 放在一起,它就不会打印第三列,依此类推。

您能否解释一下这种行为以及为什么会这样?

谢谢

标签: bashifs

解决方案


read工作正常。它在 IFS 上拆分并将每个字段分配给一个变量,该行的其余部分转到最后一个变量。如果您只给出一个变量,则整行都指向它。


推荐阅读