我有这个csv文件
4,1,0,1,1,1,0,0,0
5,1,0,1,2,1,0,0,0
6,1,0,1,3,1,0,0,0
7,1,0,1,4,1,0,0,0
8,1,0,2,3,2,0,0,0
9,1,0,2,4,2,0,0,0
10,1,0,2,5,2,0,0,0
11,1,0,2,6,2,0,0,0
12,1,1,3,3,3,0,0,1
13,1,1,3,4,3,0,0,1
14,1,1,3,5,3,0,0,1
15,1,1,3,6,3,0,0,1
16,1,1,3,7,3,0,0,1
17,1,1,4,6,4,0,0,1
18,1,1,4,7,4,0,0,1
19,1,1,4,8,4,0,0,1
20,1,1,5,7,5,0,0,1
我想要从8开头的grep 我正在尝试
grep 8 example.csv
然后我得到了foll o / p
8,1,0,2,3,2,0,0,0
18,1,1,4,7,4,0,0,1
19,1,1,4,8,4,0,0,1
我只想要以8开头的行。我应该怎么做?
答案 0 :(得分:4)
grep ^8, example.txt
其中^表示匹配模式必须从行的开头开始。我还添加了","到正则表达式,所以它不会匹配以80开头的行
答案 1 :(得分:4)
由于您使用perl
对此进行了标记,因此我假设您正在寻找Perl解决方案。最简单但最不稳健的是:
$ perl -ne 'print if /^8,/' example.csv
8,1,0,2,3,2,0,0,0
这与@Dienow的grep
解决方案相同。也可以使用-F
command-line option来分隔逗号上的行 - 但请注意,这不会处理引用字段,转义分隔符等的情况。
$ perl -F, -nle 'print if $F[0]==8' example.csv
8,1,0,2,3,2,0,0,0
如果您正在使用CSV文件,我建议您使用Text::CSV
(同时安装Text::CSV_XS
以获得速度)。
use warnings;
use strict;
use Text::CSV;
my $csv = Text::CSV->new({ binary=>1, auto_diag=>2, eol=>$/ });
while ( my $row = $csv->getline(*ARGV) ) {
$csv->print(select, $row) if $row->[0] == 8;
}
$csv->eof or $csv->error_diag;
然后像这样运行:
$ perl csv.pl example.csv
8,1,0,2,3,2,0,0,0
唯一需要注意的是它可能会重新格式化输入行(但它当然仍然是正确的CSV)。