【发布时间】:2012-07-24 23:59:35
【问题描述】:
如何获取输入 CSV 文件中每一行的第一列并输出到新文件?我正在考虑使用awk,但不确定如何使用。
【问题讨论】:
-
第一列可以包含
,吗? -
更一般:您的文件使用什么 CSV 方言?
标签: bash shell csv awk text-parsing
如何获取输入 CSV 文件中每一行的第一列并输出到新文件?我正在考虑使用awk,但不确定如何使用。
【问题讨论】:
,吗?
标签: bash shell csv awk text-parsing
试试这个:
awk -F"," '{print $1}' data.txt
它会根据, 字符(由-F 指定)将文件data.txt 中的每个输入行拆分为不同的字段,并将第一个字段(列)打印到标准输出。
【讨论】:
awk 的使用,而cut 会这样做。它有点千篇一律的味道。使用perl 或sed 会同样糟糕。没有错,只是不太对。现在,如果您回答了一个正确处理像"last, first",field2,field3 这样的csv 文件的awk 脚本,那将更合适。
cut 代替awk :-) .. 任何一个工具都适合这。 FWIW,OP 在他们的帖子中提到了 awk,我赞成“竞争”cut 解决方案(如果你发布它可能是你的)。这不是一种宗教,它是一项需要完成的小任务,我选择了几种工具中的一种来完成它。
可以做到:
$ cut -d, -f1 data.txt
【讨论】:
echo "a,b,c" | cut -d',' -f1 > newFile
【讨论】:
's 不是必需的。
输入
a,12,34
b,23,56
代码
awk -F "," '{print $1}' Input
格式
awk -F <delimiter> '{print $<column_number>}' Input
【讨论】:
这可以使用grep来实现:
$ grep -o '^[^,]\+' file.csv
【讨论】:
使用 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
【讨论】: