如何从 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
会这样做。它有点千篇一律的味道。使用perl
或sed
会同样糟糕。没有错,只是不太对。现在,如果您回答了一个正确处理像"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 > 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 文件中获取每一行的第一列?的主要内容,如果未能解决你的问题,请参考以下文章
Python如何读取csv文件某一列的每一行数据,并判断该数值是不是满足条件?