从 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
sh 使用bash脚本读取CSV文件 - 来自http://www.theunixschool.com/2012/05/shell-read-text-or-csv-file-and-extract.