如何从输入的CSV文件中获取每行的第一列并将其输出到一个新文件中?我想使用awk
,但不确定如何操作。
如何从输入的CSV文件中获取每行的第一列并将其输出到一个新文件中?我想使用awk
,但不确定如何操作。
试试这个:
awk -F"," '{print $1}' data.txt
它将根据指定的逗号字符(-F),将文件data.txt中的每个输入行分割为不同的字段,并将第一个字段(列)打印到标准输出(stdout)。awk
代替cut
是一种非常笼统的写法;如果使用perl
或者sed
,情况也不会好到哪里去。这并没有错,只是不够严谨。如果你能给出一个处理csv文件的awk
脚本,如 "last, first",field2,field3
,那才是更加恰当的做法。 - sorpigalcut
代替awk
,我就不会给你点踩了 :-) 两者都可以完成这个任务。顺便说一下,OP在他们的帖子中提到了awk,并且我给一个“竞争”的cut
解决方案点了赞(如果你发布了,也可以成为你的方案)。这不是宗教,只是一个需要完成的小任务,我选择了其中的一个工具来完成它。 - Levon\t
代替上面的逗号。 - Levon可以完成:
$ cut -d, -f1 data.txt
2021-12-26,472406,616125
的行。使用 cut 获取第一列,这个答案需要 5.1 秒。使用 Awk (awk -F, '{print $1}'
) 需要40秒。使用 Perl (perl -F, -lane 'print $F[0]'
) 需要49秒。使用 Ripgrep (rg -o '^[^,]+'
) 需要27秒。使用 GNU grep (grep -o '^[^,]\+'
) 需要177秒。 - dtolnayecho "a,b,c" | cut -d',' -f1 > newFile
输入
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
,
吗? - Karoly Horvath