小编shu*_*ter的帖子

如何使用Perl将多个正则表达式匹配连接到一个数组元素?

以下是匹配正则表达式并在数组中存储值的脚本:

    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)

最好的方法是什么?

regex arrays perl join

1
推荐指数
1
解决办法
1382
查看次数

如何使用标准的linux/unix过滤器验证信息?

我在制表符分隔文件中有以下数据:

_ 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中执行此操作

  • 读取每一行,在变量中存储第4列的值
  • 检查该变量是否为整数
  • 如果以上是真的,继续循环
  • 否则会断开循环,并显示文件数据不正确的消息

但是我如何在使用标准linux/unix过滤器的shell脚本中执行此操作?我的猜测是使用grep,但我不确定如何?

bash

1
推荐指数
1
解决办法
1956
查看次数

当我尝试编辑文件时,为什么我的Perl脚本会删除整个文件的内容?

我正在运行以下代码来打开文件(测试)并编辑(搜索和替换)它.程序似乎打开文件,但不是替换它删除文件中的所有内容.我不确定为什么会这样.有人可以帮我从这里出去吗?

#!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 file

0
推荐指数
2
解决办法
1046
查看次数

为什么Perl打印中的二维数组不正确?

在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)

arrays perl data-structures

0
推荐指数
1
解决办法
1747
查看次数

如何使用Perl的DBI模块将并行数组中的值插入数据库中?

我需要使用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 dbi

0
推荐指数
1
解决办法
1587
查看次数

如何使用Perl的DBI模块连接到两个不同的服务器?

我必须比较两个不同服务器中位于两个不同数据库中的表的列.到目前为止,我知道如何使用Perl脚本连接到一个服务器和一个数据库.是否可以使用Perl的DBI模块连接到两个不同的服务器?如果是这样,怎么样?

perl dbi

0
推荐指数
1
解决办法
937
查看次数

如何在Perl中使用不等长度数组创建CSV文件?

我必须解析一个文件,以便我可以将它导入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)

csv excel perl

-2
推荐指数
1
解决办法
480
查看次数

使用Perl将解压缩输出重定向到特定目录

我想将压缩文件解压缩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

perl unzip

-2
推荐指数
1
解决办法
5687
查看次数

标签 统计

perl ×7

arrays ×2

dbi ×2

bash ×1

csv ×1

data-structures ×1

excel ×1

file ×1

join ×1

regex ×1

unzip ×1