从Perl到shell的脚本转换
下面是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
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;