2016-01-14 89 views
-7

我有简单的简单的CSV文件如下(3列4行的那个例子):从bash或Perl脚本读取CSV

A  , B  , C 
A  , ”B,C” , D 
“A,B” , C  , D 
A  , B  , ”C,D” 

如何创建脚本,我可以进入列和行号并打印回我的内容?

注意!将引号作为参数,而不是作为一个分离器之间的逗号..

编辑: 通缉输出: 的参数:1,1(列,行)给出的答案会是:A 的参数: 2,2(col,row)给出的答案将是:B,参数为C :1,3(col,row)给定答案将为:A,B 参数:3,3(col,row)给出的答案是:d

在先进的感谢

+0

没有,我;我只是编辑我的话题:) – user5789818

+0

我试着想像这里显示的示例: http://stackoverflow.com/questions/14492590/using-bash-sed-awk-to-extract-rows- and-columns-in-csv-files – user5789818

回答

0

a.pl

#!/usr/bin/perl 

use strict; 
use warnings; 

use Text::CSV_XS qw(); 

my $row_num = shift; 
my $col_num = shift; 

my $csv = Text::CSV_XS->new({ binary => 1, auto_diag => 1 }); 

while (my $row = $csv->getline(\*ARGV)) { 
    next if --$row_num; 

    print($row->[$col_num-1], "\n"); 
    last; 
} 

a.csv:(你贴什么的是不是一个有效的CSV,虽然文字:: CSV_XS也许可以用正确的选项处理它)

A,B,C 
A,"B,C",D 
"A,B",C,D 
A,B,"C,D" 

输出:

$ ./a.pl 1 1 a.csv 
A 

$ ./a.pl 2 2 a.csv 
B,C 

$ ./a.pl 3 1 a.csv 
A,B 

$ ./a.pl 3 3 a.csv 
D 
+0

感谢您的帮助! 如果我试图模仿它的bash脚本一样:1 #/斌/庆典 COL = $行= $ 16 而IFS = '' 读-r COL1 COL2 COL3;做 \t回声-e做$ COL1 user5789818

+0

@ user5789818,wut? – ikegami

+0

我尝试做你做的,但在bash脚本 – user5789818