亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標題:
編程在線求助~
[打印本頁]
作者:
kamadevin
時間:
2015-07-08 14:02
標題:
編程在線求助~
本帖最后由 kamadevin 于 2015-07-08 14:28 編輯
perl求助
現(xiàn)在需要處理幾個文件
想要達到如下效果
文件格式如下
文件1
a 1
b 2
c 3
d 4
e 5
文件2
a 6
b 7
d 8
e 9
f 10
想整合在一起成為
a 1 6
b 2 7
c 3 0
d 4 8
e 5 9
f 0 10
中間以 table符分開
請問如何做到,求幫忙~
作者:
xiaoxingan99
時間:
2015-07-08 16:57
本帖最后由 xiaoxingan99 于 2015-07-08 16:59 編輯
實在不會用hash,參考以前的帖子,給出一個我寫的復(fù)雜程序
open FF, "e:/perl/A.txt";
while(<FF>){
chomp;
my ($key, $value) = split / /;
$h{$key}=$value;
}
open FF1, "e:/perl/B.txt";
while(<FF1>){
chomp;
my ($key1, $value1) = split / /;
$h1{$key1}=$value1;
}
foreach $a ("a".."f"){
unless ($h{$a}){
$h{$a}=0;
}
unless ($h1{$a}){
$h1{$a}=0;
}
print "$a\t$h{$a}\t$h1{$a}\n";
}
作者:
songyc_2015
時間:
2015-07-08 23:41
回復(fù)
1#
kamadevin
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
my %hash;
open my $FHA, "$ARGV[0]";
while (<$FHA>)
{
chomp;
/(\S+)\s+(\S+)/;
$hash{$1} = $2;
}
close $FHA;
open my $FHB, "$ARGV[1]";
while (<$FHB>)
{
chomp;
/(\S+)\s+(\S+)/;
$hash{$1} = length($hash{$1}) ? $hash{$1}."\t".$2: "0\t".$2;
}
close $FHB;
for (sort { $a cmp $b } keys %hash)
{
$hash{$_} = $hash{$_} . "\t0" if (scalar split(/\t/, $hash{$_})) == 1;
print "$_\t$hash{$_}\n";
}
復(fù)制代碼
作者:
jason680
時間:
2015-07-09 00:07
本帖最后由 jason680 于 2015-07-09 00:07 編輯
回復(fù)
1#
kamadevin
$ perl combin.pl f1 f2
a 1 6
b 2 7
c 3 0
d 4 8
e 5 9
f 0 10
$ cat combin.pl
#! /usr/bin/env perl
use strict;
use warnings;
message() if(@ARGV < 1);
sub message{
print<<EOF;
Usage: $0 file1 [file2 [file3 ...]]
Ex: $0 f1 f2
EOF
exit(1);
}
my $sCnt = 0;
my %hKey;
my @aKey;
foreach my $sFile (@ARGV){
$sCnt++;
open(FHin, "<$sFile") or die "can't open $sFile\n";
while(<FHin>){
my($sKey, $sVal) = split;
if(! exists $hKey{$sKey}){
push @aKey, $sKey;
}
$hKey{$sKey}[$sCnt] = $sVal;
}
close(FHin);
}
foreach my $sKey (@aKey){
my $sOut = "";
foreach( 1 .. $sCnt){
$hKey{$sKey}[$_]
+= 0
;
$sOut .= " $hKey{$sKey}[$_]";
}
print "$sKey$sOut\n";
}
作者:
MMMIX
時間:
2015-07-09 00:11
回復(fù)
4#
jason680
一個 hash 足矣:
use v5.10;
my %record;
for my $idx (0..$#ARGV) {
open(my $h, "<", "$ARGV[$idx]")
or die "Cannot open $ARGV[$idx]: $!";
while (<$h>) {
chomp;
my @r = split / /, $_, 2;
$record{$r[0]}->[$idx] = $r[1];
}
}
for my $k (sort keys %record) {
$#{$record{$k}} = $#ARGV;
my @v = map { $_ ? $_ : 0 } @{$record{$k}};
say "$k, @v";
}
復(fù)制代碼
作者:
jason680
時間:
2015-07-09 00:58
本帖最后由 jason680 于 2015-07-09 08:04 編輯
回復(fù)
5#
MMMIX
少不一定是優(yōu),多不一定是劣
$ perl -lane '
{
$f=$ARGV,$c++ if($ARGV ne $f);
($k, $v) = split;
$h{$k}[$c] = $v;
}
END{
$k=$_,print"$k @{[map{$h{$k}[$_]+0}(1..$c)]}" for(sort keys %h);
}' f1 f2
a 1 6
b 2 7
c 3 0
d 4 8
e 5 9
f 0 10
作者:
zhlong8
時間:
2015-07-09 09:28
回復(fù)
6#
jason680
你再把這么多代碼寫命令行里我要報警抓你了
你發(fā)個投票看看有幾個人能完全看懂的
作者:
jason680
時間:
2015-07-09 10:15
回復(fù)
7#
zhlong8
版主 你“抓"錯人了...(我都說了:少不一定是優(yōu),多不一定是劣)
你發(fā)一篇 教教大家如何正確編程Perl...
作者:
zhlong8
時間:
2015-07-09 12:24
回復(fù)
8#
jason680
不排版就把沒用的空格和換行刪掉
perl -lane '$f=$ARGV,$c++if$ARGV ne$f;$h{$F[0]}[$c]=$F[1]}{$"="\t";$k=$_,print"$k\t@{[map{$h{$k}[$_]+0}1..$c]}"for sort keys%h' f1 f2
復(fù)制代碼
作者:
sunzhiguolu
時間:
2016-09-13 15:22
perl -anle '{($k,$v)=@F;if(@ARGV){$h{$k}=[$v];next}if($h{$k}){$h{$k}->[1]=$v}else{$h{$k}=[0,$v]}}END{print join (" ", $_, $h{$_}->[0], ($h{$_}->[1] // 0)) for sort keys %h}' a b
復(fù)制代碼
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2