我有一个我正在清理的perl脚本,它工作得非常好,但我想知道是否有人知道将2个拆分组合成一个命令的好方法。
我有一个.csv文件,就像这个小例子:
Move_VALIDATE,020212191ABC01,SNSNT---01CAB101A-1-1-4-20,circuit 402339-1,interface 1/1/0
Move_VALIDATE,030323202ABC01,SNSNT01CAB101A-1-1-4-20,circuit 303559-1,interface 2/2/0
带有两个分割的脚本部分:
foreach my $line (@file_array){
my $CHECK_ID = (split /,/, $line) [2];
my @SPLIT_ID = (split /-/, $CHECK_ID);
my $FINAL_ID = ($CHECK_ID =~ /---/) ? "$SPLIT_ID[0]---$SPLIT_ID[3]" : "$SPLIT_ID[0]";
print "$FINAL_ID\n";
}
输出:
SNSNT---01CAB101A
SNSNT01CAB101A
答案 0 :(得分:1)
首先,如果你有很多字段的长行,那么你可以限制要求split
返回的字段数。在这种情况下,您需要第三个字段,因此您希望将拆分限制为四个字段。
其次,在现场结束时更容易移除您不需要的部分。
#!/usr/bin/env perl
use strict;
use warnings;
while (my $line = <DATA>) {
(my $id = (split /,/, $line, 4)[2]) =~ s/(?:-[0-9]{1,2})+\z//;
print "$id\n";
}
__DATA__
Move_VALIDATE,020212191ABC01,SNSNT---01CAB101A-1-1-4-20,circuit 402339-1,interface 1/1/0
Move_VALIDATE,030323202ABC01,SNSNT01CAB101A-1-1-4-20,circuit 303559-1,interface 2/2/0
$ ./klklj.pl SNSNT---01CAB101A SNSNT01CAB101A
答案 1 :(得分:0)
你可以使用一个分割用于逗号,并使用单词边界断言用于第二个,例如:
#!/usr/bin/env perl
use strict;
use warnings;
while (<DATA>) {
chomp;
printf qq|%s\n|, (split /\b-\b/, (split /,/, $_)[2])[0];
}
__DATA__
Move_VALIDATE,020212191ABC01,SNSNT---01CAB101A-1-1-4-20,circuit 402339-1,interface 1/1/0
Move_VALIDATE,030323202ABC01,SNSNT01CAB101A-1-1-4-20,circuit 303559-1,interface 2/2/0
像以下一样运行:
perl script.pl
产量:
SNSNT---01CAB101A
SNSNT01CAB101A