2012-12-30 50 views
0

我在Perl中遇到問題。使用while循環讀取perl中的多列

我想使用while循環讀取1行中的多個列。

我知道我能做到這一點使用shell腳本像下面

cat file.txt|while read field1 field2 field3 field4 
do 
statement1 
statement2 
done 

我想在Perl,但不知道如何得到這同樣的事情。

請幫幫我。

由於提前, Sumana

+0

你想從文件中分割出什麼? –

+0

是的,文件中可能有很多字段,但我只想提取上面顯示的n個字段,然後我將在下面使用這些變量。 我知道數組是可選的,但我想檢查是否有更簡單的方法可用,如shell在這裏提供。 – sumana

+1

@Sumana,不提取n場。第四場之後所有的領域都會被吸引到你的「field4」變量中。 Maruice的回答表現完全一樣。爲了丟棄剩餘的,你需要在perl版本的bash或'undef'中增加一個'_'。 – jordanm

回答

2

在一個循環,你可以這樣做:

#!/usr/bin/perl -w 
use strict; 

my $file = "MYFILE"; 
open (my $fh, '<', $file) or die "Can't open $file for read: $!"; 
my @lines; 
while (<$fh>) { 
    my ($field1, $field2, $field3) = split; 
} 
close $fh or die "Cannot close $file: $!"; 

在循環中,Perl將分配$ _文件的下一行,並且在沒有參數的情況下,split將在空白處分割該變量。

+0

我認爲它應該工作。讓我試試併發布我的反饋 – sumana

+0

是的。它解決了我的目的。非常感謝莫里斯您的熱心幫助。 – sumana

+0

我的榮幸!祝你好運,如果你有機會,如果你還沒有,請將我的答案標記爲已接受。乾杯! –

2

使用

perl -F -ane '....' your file 

-F標誌將每個字段存儲在數組中@ F.so u可以使用$ F [0]的第一個字段。 例如:

perl -F -ane 'print $F[0]' your file 

將打印每行

的第一場,如果你關心性能:

perl -lne "my($f,$s,$t)=split;print 'first='.$f.' second='.$s.' third='.$t" your_file 

一個大的例如:同時檢查this

+0

我知道數組可以解決這個問題,但這有點冗長,它也使用內存分配許多不需要的值,所以我想檢查一下Perl是否也提供了像shell這樣的更簡單的方法。 – sumana