жемчугу назвали модуль Scalar::Util
(включенный с жемчугом с тех пор v5.8), которому назвали полезную функцию looks_like_number()
, который может использоваться, чтобы обнаружить, является ли поле числом или нет.
looks_like_number
не прекрасно, но довольно хорош.
Пустая схема простой программы жемчуга, чтобы сделать, что Вы хотите, могла бы выглядеть примерно так:
#! /usr/bin/perl
use Scalar::Util qw(looks_like_number);
while(<>) {
chomp;
my @fields=split("\t");
foreach my $f (0..scalar @fields-1) {
if (looks_like_number($fields[$f])) {
$fields[$f] += 42;
$fields[$f] *= 7;
$fields[$f] = sprintf("%.2f",$fields[$f]);
}
}
print join("\t",@fields),"\n";
}
Если дали Ваши демонстрационные данные выше, как введено, это печатает это:
file name size owner
file1.txt 380.41 root
file2.txt 295.21 user1
file3.txt 2016.00 user2
file4.txt 86709.00 root
file5.txt 441.00 user3
file6.txt 2016.00 user1
file name owner last modified last accessed
text4.txt root 383.11 388.71
text5.txt user3 401.33 532.00
file1.txt root 455.00 511.02
Вот другая версия сценария, который использует Математику:: BigFloat для всех вычислений, округляя десятичные числа к 2 цифрам.
#! /usr/bin/perl
use Scalar::Util qw(looks_like_number);
use Math::BigFloat;
while(<>) {
chomp;
my @fields=split("\t");
foreach my $f (0..scalar @fields-1) {
if (looks_like_number($fields[$f])) {
my $BF = Math::BigFloat->new($fields[$f]);
$BF->badd(42);
$BF->bmul(7);
$BF->ffround(-2);
$fields[$f] = $BF->bstr();
}
}
print join("\t",@fields),"\n";
}
пример ввел:
file name owner last modified last accessed
text4.txt root 12.73 13.53
text5.txt user3 15.3333 34
file6.txt root 903709792518875002.42857142857142857142 903709792518875002
file7.txt root 6659166111488656281486807152009765625 539422123247359763587428687890625
вывод:
file name owner last modified last accessed
text4.txt root 383.11 388.71
text5.txt user3 401.33 532.00
file6.txt root 6325968547632125311.00 6325968547632125308.00
file7.txt root 46614162780420593970407650064068359669.00 3775954862731518345112000815234669.00
3.2.0
версия исходного кода, используемого для компиляции этого ядра. Они могут быть четырьмя числами долго (например, 2.6.32.55) указание на уровень установки патча на той версии. Однако эти четыре системы цифры только использовались для ядер версии 2.6, запускающихся в 2.6.8. Т.е. это не используется с 3.x ядра, которые являются этими 3 числами, release-major-minor. Отметьте тонкое различие от трех систем главного незначительного уровня установки патча числа, наиболее часто используемых с программным обеспечением.
-24-generic
указывает на уровень установки патча и конфигурацию, используемую дистрибутивом, 24 являющийся их уровнем установки патча, и универсальный являющийся конфигурацией, используемой в компиляции. Этот уровень установки патча не обязательно сбрасывает/изменяет для различных исходных версий ядра; дистрибутив любой применяет неизменные патчи (так, например, 3.2.1-24-generic
) или они увеличивают уровень установки патча (3.2.1-25-generic
).
Старшими значащими аспектами является число исходной версии и стиль конфигурации. Позже важно, потому что это указывает на существенные различия в способе, которым ядро было на самом деле настроено для сборки.
Это не показывает, какая архитектура ядро было создано для - например, x86_64
- но uname -m
вывод делает.
Это означает, что у Вас есть ядро Linux на 64 бита. И версия 3.2.
Точно это - 24-й выпуск этого ядра. И это - универсальное. Это означает, что ядро может использоваться для систем сервера, а также рабочего стола.