以下是匹配正则表达式并在数组中存储值的脚本:
sub b1 {
# print $_;
my @file = @_;
my @value;
my $find = qr/(\s+)([0-9]+)\s([A-Z])\s[0-1].[0-9]+\s->\s([A-Z])\s/;
foreach my $file(@file){
push (@value, $file=~ /$find/) ;
print "\n";
}
return @value;
}
my @array_b1 = b1(@body);
print "@array_b1 \n";
__DATA__
28 C 0.510 -> L 0.923
30 S 0.638 -> A 0.527
31 A 0.496 -> P 0.952
__OUTPUT__
28 C L 30 S A 31 A P
Run Code Online (Sandbox Code Playgroud)
在从正则表达式捕获值并将其存储为数组时,脚本将值存储在数组中的连续元素中,即上面的数组包含元素:
@array[1]=28
@array[2]=C
@array[3]=L
@array[4]=30.
Run Code Online (Sandbox Code Playgroud)
相反,我想将正则表达式捕获的值存储在同一个数组元素中.那是:
@array[1]=28CL
@array[2]=30SA
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
我在制表符分隔文件中有以下数据:
_ DATA _
Col1 Col2 Col3 Col4 Col5
blah1 blah2 blah3 4 someotherText
blahA blahZ blahJ 2 someotherText1
blahB blahT blahT 7 someotherText2
blahC blahQ blahL 10 someotherText3
Run Code Online (Sandbox Code Playgroud)
我想确保此文件第4列中的数据始终为整数.我知道如何在perl中执行此操作
但是我如何在使用标准linux/unix过滤器的shell脚本中执行此操作?我的猜测是使用grep,但我不确定如何?
我正在运行以下代码来打开文件(测试)并编辑(搜索和替换)它.程序似乎打开文件,但不是替换它删除文件中的所有内容.我不确定为什么会这样.有人可以帮我从这里出去吗?
#!use/bin/perl
use strict;
use warnings;
my $line = $ARGV[0];
my $find = '\s{6}seqfile\s=\sinfile';
my $replace = '\s{6}seqfile\s=\sinfil2';
open (FILE, ">/home/shubhi/Desktop/pamlrun/test") || die "cant open file \n";
my @body = <FILE>;
foreach $line(@body)
{
(s/$find/$replace/g);
{
print FILE "$line";
}
}
close(FILE);
print "reached here\n";
exit;
Run Code Online (Sandbox Code Playgroud) 在Perl中处理二维数组让我很头疼.无论如何,以下是我的问题:
我有一个循环将一个数组(比如@twoOneArray)推入另一个数组,比如说@twoDimArray,然后在循环的下一次迭代开始之前重置,然后再次用新的值集推入@twoDimArray.当我使用以下任一方式打印此@twoDimArray时:
print Dumper \@twoDimArray;
Run Code Online (Sandbox Code Playgroud)
它给出了输出
OUTPUT
$VAR1 = [
[
'BB',
'AA',
'AA'
],
$VAR1->[0],
$VAR1->[0],
$VAR1->[0]
];
Run Code Online (Sandbox Code Playgroud)
或使用循环
for (my $i=0; $i<4; $i++){
for (my $j=0; $j<4; $j++){
print "$twoDimArray[$i][$j] \n";
}
}
Run Code Online (Sandbox Code Playgroud)
数据重复.
OUTPUT
行= 0 BB AA AA
行= 1 BB AA AA
行= 2 BB AA AA
行= 3 BB AA AA
等等....
我无法弄清楚为什么两种输出方式都出错了.如果我每次都打印@twoDimArray(在移动到循环的下一次迭代之前,即在使用push函数之后)插入@twoOneArray,那么值似乎很好并且不重复自己,但是在单个go中打印它似乎给出了上述错误.这里也有类似的问题,但我不确定这对我是否有意义.有什么建议?
构建2D数组的代码:
for ($k = 1; $k <= $counter; $k++){
@twoOneArray = (); #reset it when loop starts …Run Code Online (Sandbox Code Playgroud) 我需要使用Perl的DBI模块在数据库中插入值。我已解析的文件,以获得这些值,因此这些值出现在一个阵列中,比方说@array1,@array2,@array3。我知道如何一次插入一个值,但不能从数组中插入。
我知道一次插入一个值:
$dbh = DBI->connect("dbi:Sybase:server=$Srv;database=$Db", "$user", "$passwd") or die "could not connect to database";
$query= "INSERT INTO table1 (id, name, address) VALUES (DEFAULT, tom, Park_Road)";
$sth = $dbh->prepare($query) or die "could not prepare statement\n";
$sth-> execute or die "could not execute statement\n $command\n";
Run Code Online (Sandbox Code Playgroud)
我不确定是否有包含ID的array1,包含名称的array2和包含地址的array3,如何插入值。
我必须比较两个不同服务器中位于两个不同数据库中的表的列.到目前为止,我知道如何使用Perl脚本连接到一个服务器和一个数据库.是否可以使用Perl的DBI模块连接到两个不同的服务器?如果是这样,怎么样?
我必须解析一个文件,以便我可以将它导入excel.所以,我认为最好的方法是创建一个csv文件.在此文件中,我必须将内容划分为不同的类别,并将它们表示在不同的列中.所以,我已经解析了文件以创建与类别对应的不同数组.现在,我正在尝试使用这些数组创建一个csv文件(考虑使用for循环).但问题是,阵列长度不等.
INPUT
NM_144736.3
NM_144963.1
XM_144975.2
BC144986.1
NM_144989.1
BC145001.1
XM_145018.2
NM_145015.2
XM_030711.2
AK145024.1
AK145030.1
NM_145034.1
Run Code Online (Sandbox Code Playgroud)
我使用正则表达式将数据解析为不同的数组.所有NM到@ array1,XM到@ array2,BC到@ array3,AK到@ array4.如果创建数组不是一个好主意,请让我知道是什么?我怎样才能从上面的数据生成csv文件.
编辑:
OUTPUT
NM_144963.1,XM_144975.2,BC144986.1,AK145024.1
NM_144963.1,XM_145018.2,BC145001.1,AK145030.1
NM_144989.1,XM_030711.2
NM_145015.2
NM_145034.1
Run Code Online (Sandbox Code Playgroud) 我想将压缩文件解压缩files.zip到一个与我的工作目录不同的目录.说,我的工作目录是/home/user/address,我想解压缩文件/home/user/name.
我试着这样做
#!/usr/bin/perl
use strict;
use warnings;
my $files= "/home/user/name/files.zip"; #location of zip file
my $wd = "/home/user/address" #working directory
my $newdir= "/home/user/name"; #directory where files need to be extracted
my $dir = `cd $newdir`;
my @result = `unzip $files`;
Run Code Online (Sandbox Code Playgroud)
但是当从我的工作目录运行上面的内容时,所有文件都会在工作目录中解压缩.如何将未压缩的文件重定向到$newdir?