我想用Perl腳本對文件進行數字排序。用Perl數字排序文件
我的文件看起來像如下:
1:file1:filed2
3:filed1:field2
10:filed1:field2
4:field1:field2
7:field1:field2
我想顯示爲:上:
1:file1:filed2
3:filed1:field2
4:field1:field2
7:field1:field2
10:filed1:field2
我想用Perl腳本對文件進行數字排序。用Perl數字排序文件
我的文件看起來像如下:
1:file1:filed2
3:filed1:field2
10:filed1:field2
4:field1:field2
7:field1:field2
我想顯示爲:上:
1:file1:filed2
3:filed1:field2
4:field1:field2
7:field1:field2
10:filed1:field2
拆分和存儲在陣列中的哈希值。然後,你可以整理並打印出哈希鍵:
my %data;
while(<DATA>){
my @field = split(/:/);
$data{$field[0]} = [@field[1..2]];
}
print join (':', $_, @{$data{$_}}) for sort { $a <=> $b } keys %data;
print "\n";
1:file1:filed2
3:filed1:field2
4:field1:field2
7:field1:field2
10:filed1:field2
Thanks.But我寫我的腳本輸出到錯誤file.And我想按順序顯示我的錯誤。上面的第一個字段表示行號。我寫入錯誤文件和關閉文件。當我試圖再次閱讀它進行排序時,我在關閉的文件句柄上得到了消息readline()。Symbol :: GEN3 at ./SCOM_importOnePosMigrationId .My close命令$ oErrorFileHandle-> close(); – puspa
對於簡單和快速的解決方案,使用Sort::Key::Natural(快速自然排序)模塊:
use warnings;
use strict;
use Sort::Key::Natural qw(natsort);
open my $fh, "<", "file.txt" or die $!;
my @files = natsort <$fh>;
close $fh;
print @files;
輸出:
1:file1:filed2
3:filed1:field2
4:field1:field2
7:field1:field2
10:filed1:field2
方式sort
在Perl中工作,它是通過您的列表工作,將每個元素設置爲$a
和$b
- 然後測試這些元素。默認情況下,它使用cmp
這是一種字母數字排序。
你也有<=>
這是一個數字排序,你正在尋找的種類。 (阿爾法排序10
之前2
)。
所以我們需要做的是提取您的密鑰的數值。還有一些你可以做到這一點的方式 - 將明顯的是採取一個子程序暫時複製變量:
#!/usr/bin/env perl
use strict;
use warnings;
sub compare_first_num {
my ($a1) = split (/:/, $a);
my ($b1) = split (/:/, $b);
return $a1 <=> $b1;
}
print sort compare_first_num <>;
它使用<>
- 神奇的文件句柄 - 閱讀在命令行中指定STDIN
或文件。
或者,在新皮爾斯(5.16+):
print sort { $a =~ s/:.*//r <=> $b =~ s/:.*//r } <>;
我們用「替身 - 返回」操作比較只是我們感興趣的子串(數字)。
有用的''perl'具有'sort'功能,工作起來相當不錯。 – Sobrique
我在寫errr文件:open($ oErrorFileHandle,「>」。$ InputFile。「error」)||死「\ n錯誤 - >無法打開$ InputFile.error ...」;然後我嘗試使用下面的程序對上述錯誤文件進行排序:#foreach(sort <$ oErrorFileHandle>) #{0}打印$ oErrorFileHandle $ _; #} 我得到的錯誤信息如下:readline()在關閉的文件句柄符號:: GEN3在./SCOM_importOnePosMigrationId線226上。 謝謝 – puspa
請[編輯]您的問題與其他細節。 (如代碼片段)。他們很難閱讀評論。 (和評論會更容易刪除) – Sobrique