0

行内の空白を削除し、特定の列を抽出する Perl 正規表現

私の行は次のようになります。

324446  psharma jobA      2       0       435529  0       0       0     435531

ここで、split関数で行を分割し、以下のコマンドで値を配列に保存できます

@strings = split(/\s+/);

余分な変数は必要ありません。正規表現を使用して、列 1、2、3、および 10 の値を$1$2$3およびとして抽出します$10

4

1 に答える 1

4

スタックエクスチェンジへようこそ。

追加の変数は必要ありません:

use strict;
use warnings;

my $line = '  324446   psharma jobA 2   0 435529 0 0 0 435531     ';

# Remove leading and trailing white space
$line =~ s/^ \s+ | \s+ $//x;
# Split by consecutive white space and keep certain fields:
my ($col1, $col2, $col3, $col10) = (split m/\s+/, $line)[0, 1, 2, 9];

print "1: $col1 2: $col2 3: $col3 10: $col10\n";

出力:

1: 324446 2: psharma 3: jobA 10: 435531

.を使用しても、追加の変数は本当に必要ありませんsplit。たとえば、これらのフィールドのみを別の関数に渡したい場合、分割線は次のようになります。

some_func((split m/\s+/, $line)[0, 1, 2, 9]);

列番号のカウントは0ではなく1から始まると想定していることに注意してください(つまり、「列1」は「324446」などの数字です)。それが、私の例でも変数に名前を付けた方法です。

于 2012-08-28T07:44:30.473 に答える