如何从 CSV 文件中获取每一行的第一列?

Posted

技术标签:

【中文标题】如何从 CSV 文件中获取每一行的第一列?【英文标题】:How to get the first column of every line from a CSV file? 【发布时间】:2012-07-24 23:59:35 【问题描述】:

如何获取输入 CSV 文件中每一行的第一列并输出到新文件?我正在考虑使用awk,但不确定如何使用。

【问题讨论】:

第一列可以包含,吗? 更一般:您的文件使用什么 CSV 方言? 【参考方案1】:

试试这个:

 awk -F"," 'print $1' data.txt

它会根据, 字符(由-F 指定)将文件data.txt 中的每个输入行拆分为不同的字段,并将第一个字段(列)打印到标准输出。

【讨论】:

@downvoter .. 否决没有解释对任何人(OP、SO或我)都没有帮助。这是一个满足 OP 规定要求的功能性解决方案。我很乐意纠正错误或改进我的答案,但这需要建设性的反馈。 我没有投反对票,但我也不会投赞成票:这是awk 的使用,而cut 会这样做。它有点千篇一律的味道。使用perlsed 会同样糟糕。没有错,只是不太对。现在,如果您回答了一个正确处理像"last, first",field2,field3 这样的csv 文件的awk 脚本,那将更合适。 @Sorpigal ..如果您使用cut 代替awk :-) .. 任何一个工具都适合这。 FWIW,OP 在他们的帖子中提到了 awk,我赞成“竞争”cut 解决方案(如果你发布它可能是你的)。这不是一种宗教,它是一项需要完成的小任务,我选择了几种工具中的一种来完成它。 @Levon 可能是反对者认为您的解决方案不完整。 OP希望输出到一个新文件。 :P @JaypalSingh 哈哈.. 是的,也许,但这有点小(任何使用 linux 系统的人很可能知道如何使用 io 重定向)并且很容易被反对者注意到(然后微不足道地固定)。 OP似乎并没有为此感到困扰(所有答案也没有提供这一点)。没关系,它解决了 OP 的问题,这是 Q&A 的主要原因。【参考方案2】:

可以做到:

$ cut -d, -f1 data.txt

【讨论】:

【参考方案3】:
echo "a,b,c" | cut -d',' -f1 > newFile

【讨论】:

如果 shell 可以不转义处理它,则分隔符周围的 's 不是必需的。 +1 反对反对票。这个答案可以说是最完整最正确的!【参考方案4】:

输入

a,12,34
b,23,56

代码

awk -F "," 'print $1' Input

格式

awk -F <delimiter> 'print $<column_number>' Input

【讨论】:

【参考方案5】:

这可以使用grep来实现:

$ grep -o '^[^,]\+' file.csv

【讨论】:

【参考方案6】:

使用 Perl:

perl -F, -lane 'print $F[0]' data.txt &gt; data2.txt

使用这些命令行选项:

-n 循环输入文件的每一行 -l 在处理之前删除换行符,然后将它们添加回 -a 自动拆分模式 - 将输入行拆分为 @F 数组。默认为空格分割。 -e执行perl代码 -F 自动拆分修饰符,在这种情况下拆分 ,

如果您想就地修改原始文件,请使用-i 选项:

perl -i -lane 'print $F[0]' data.txt


如果您想就地修改原始文件并制作备份副本:

perl -i.bak -lane 'print $F[0]' data.txt


如果您的数据是空格分隔而不是逗号分隔:

perl -lane 'print $F[0]' data.txt

【讨论】:

以上是关于如何从 CSV 文件中获取每一行的第一列?的主要内容,如果未能解决你的问题,请参考以下文章

从 csv 文件创建字典?

Python如何读取csv文件某一列的每一行数据,并判断该数值是不是满足条件?

从Python中的csv文件中删除第一列[重复]

求助,python如何在csv插入一列的问题

如何在for和if循环中获取spark scala数据帧的最后一行的第一列值

如何每隔一行读取 CSV 文件