从Perl到shell的脚本转换

从Perl到shell的脚本转换,perl,bash,shell,Perl,Bash,Shell,下面是perl中的代码。 我们能用shell脚本写同样的东西吗?? 如果是,怎么做? 我使用了关联数组,但无法实现这一点 open MYFILE, "<", "$ARGV[0]" or die "Can't open $ARGV[0] file \n"; ############ to retieve the info and put them in associative arrray ############## $line = <MYFILE>; @line1 = s

下面是perl中的代码。 我们能用shell脚本写同样的东西吗?? 如果是,怎么做? 我使用了关联数组,但无法实现这一点

open MYFILE, "<", "$ARGV[0]" or die "Can't open $ARGV[0] file \n";

############ to retieve the info and put them in associative arrray ##############

$line = <MYFILE>;
@line1 = split(/,/ , $line);
$length = @line1;
$count = 0;
while($count < $length)
{
    $line1[$count] =~ s/^\"//; 
    $line1[$count] =~ s/\"$//;
    $count++;
}


$line = <MYFILE>;
@line2 = split(/,/ , $line);
$length = @line2;
$count = 0;
while($count < $length)
{
    $line2[$count] =~ s/^\"//; 
    $line2[$count] =~ s/\"$//;
    $count++;
}

$count = 0;
while($count < $length)
{
    $array{$line1[$count]}=$line2[$count];
    $count++;
}

openmyfile,“当然,您可以将其转换为shell脚本:只需将perl脚本包装在here文档中,将其传递到
perl
,并将
#!/bin/sh
放在顶部

#!/bin/sh
perl - <<'END' $1
...
END

它甚至不会太长,但不太可能中断(它不会在引号内用逗号分隔).

我确信上面的内容可以在bash中重写。您尝试过什么吗?如果是,出了什么问题?我想知道您为什么要将Perl转换为shell。您好。非常感谢您的建议。但是我不能使用Perl,因为我正在处理mysql数据库,并且没有DBI模块(安装说明需要大量依赖项)所以,现在的任务是编写一个与数据库和.csv一起工作的shell脚本..谢谢,我有一个巨大的perl脚本..那只是一个snippet@jakeryan决定您不能安装CPAN模块是很不幸的,但我确信您是在某种不寻常的约束下运行的,这使得这不可能(尽管我无法想象这样的约束)。如果你不会使用Perl,你可能想学习一些Python,它可能比Bash更适合。我关于docs的观点是开玩笑的。这是一种常见的shell语法,你可以在脚本中包含文件内容。然后可以将它传递给命令的STDIN,例如
Perl
解释器。我的第一个代码片段显示(其中,
是原始脚本)。
sub get_fields {
  map { s/^"//; s/"$//; $_ } split /,/, $_[0];
}

my @keys = get_fields scalar <>; # 1st line
my @vals = get_fields scalar <>; # 2nd line

my %hash;
@hash{ @line1 } = @line2;
use strict; use warnings; use autodie;
use Text::CSV;
my $csv = Text::CSV->new({ binary => 1 });

open my $fh, "<:utf8", $ARGV[0];

my $keys = $csv->getline($fh);
my $vals = $csv->getline($fh);

my %hash;
@hash{@$keys} = @$vals;