从 bash 或 perl 脚本中读取 CSV [重复]

Posted

技术标签:

【中文标题】从 bash 或 perl 脚本中读取 CSV [重复]【英文标题】:Read CSV from bash or perl script [duplicate] 【发布时间】:2016-04-19 22:44:17 【问题描述】:

我有如下简单的 CSV 文件(该示例为 3 列和 4 行):

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

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

注意!引号之间的逗号作为参数而不是分隔符..

编辑: 想要的输出: 对于参数:1,1 (col,row) 给定的答案将是:A 对于参数:2,2 (col,row) 给定的答案将是:B,C 对于参数:1,3 (col,row) 给定的答案将是:A,B 对于参数:3,3 (col,row) 给定的答案将是:D

在此致谢

【问题讨论】:

我试着像这里展示的例子那样思考:***.com/questions/14492590/… 【参考方案1】:

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,尽管 Text::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

【讨论】:

感谢您的帮助!如果我尝试将其模拟为 bash 脚本,例如:#!/bin/bash COL=$1 ROW=$2 while IFS=',' read -r col1 col2 col3; do echo -e $col1 done 我尝试做你所做的,但在 bash 脚本中 @user5789818:提示。你不能。 bash 没有 Text::CSV_XS 模块 我知道 :) 我正在尝试做这个 perl 脚本所做的事情,但是在 bash 脚本中。直到现在我才感到头疼。 您期待什么?将 1000 行 C 代码重写为 bash 代码通常不是小菜一碟

以上是关于从 bash 或 perl 脚本中读取 CSV [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 Bash 或 Perl 脚本运行 SQL 语句?

如何从 Perl 快速访问许多大型 CSV 文件中的数据?

如何处理 bash 脚本读取的 CSV 文件中的逗号

在bash中管理csv文件中读取动态字段的Unix权限

在 Perl 中,如何从文件中删除 ^M?

sh 使用bash脚本读取CSV文件 - 来自http://www.theunixschool.com/2012/05/shell-read-text-or-csv-file-and-extract.