【发布时间】:2019-10-22 21:14:31
【问题描述】:
我有符合以下格式的文本文件:
1 4730 1031782 init
4 0 6 events
2190 450 0 top
21413 5928 1 sshd
22355 1970 2009 find
我需要将它读入 perl 中的数据结构,以便我根据这些列中的任何一个进行排序和打印。
从左到右,这些列是process_id、memory_size、cpu_time 和program_name。
如何读取具有类似格式的文本文件,以允许我对数据结构进行排序并根据排序进行打印?
到目前为止我的尝试:
my %tasks;
sub open_file{
if (open (my $input, "task_file" || die "$!\n")){
print "Success!\n";
while( my $line = <$input> ) {
chomp($line);
($process_id, $memory_size, $cpu_time, $program_name) = split( /\s/, $line, 4);
$tasks{$process_id} = $process_id;
$tasks{$memory_size} = $memory_size;
$tasks{$cpu_time} = $cpu_time;
$tasks{$program_name} = $program_name;
print "$tasks{$process_id} $tasks{$memory_size} $tasks{$cpu_time} $tasks{$program_name}\n";
}
这确实可以正确打印输出,但是我不知道如何按特定列(即 process_id 或任何其他列)对生成的 %tasks 哈希进行排序并以排序格式打印整个数据结构.
【问题讨论】:
-
使用数组数组的解决方案是否有用或者您需要哈希?
-
对数组数组完全开放
-
使用来自 GNU coreutils 的 /usr/bin/sort:
sort -k1 -n so-56493032.csv