bash - 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 放在一起,它就不会打印第三列,依此类推。
您能否解释一下这种行为以及为什么会这样?
谢谢
解决方案
read
工作正常。它在 IFS 上拆分并将每个字段分配给一个变量,该行的其余部分转到最后一个变量。如果您只给出一个变量,则整行都指向它。
推荐阅读
- javascript - 在 Java 脚本中给定两个字符串,查找它们是否彼此相距一个编辑
- reactjs - 提交时无法读取未定义的属性“推送”
- azure-powershell - Sync-AzureAnalysisServicesInstance 导致同步横向扩展 Azure 分析服务实例时出现问题
- python - Pygame(对象连续运动)
- javascript - 无法使用搜索检测单个大写或小写
- tensorflow - AttributeError:模块“tensorflow.contrib.lite.python.convert_saved_model”没有属性“convert”
- typo3 - 为新记录操作(TCA / IRRE)创建一定数量的内联记录
- sql - 在 SQL 中计算连续序列的块
- java - 从 HttpServlet 到 REST 的等效 POST 和 GET
- android - 如何做这个可扩展的 RecyclerView