perl中Getopt::Std与split相关问题.

perl中Getopt::Std与split相关问题.

[root@fc8 tmp]# ./awkpl.pl -F : -n 0 /etc/passwd

x
x
root:x:0:0:root:/root:/bin/bash

x
x
bin:x:1:1:bin:/bin:/sbin/nologin

x
x
daemon:x:2:2:daemon:/sbin:/sbin/nologin

x
x
adm:x:3:4:adm:/var/adm:/sbin/nologin

x
x
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

x
x
sync:x:5:0:sync:/sbin:/bin/sync

x
x
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

x
x
halt:x:7:0:halt:/sbin:/sbin/halt

x
x
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

x
x
news:x:9:13:news:/etc/news:

x
x
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

x
x
operator:x:11:0:operator:/root:/sbin/nologin

x
x
games:x:12:100:games:/usr/games:/sbin/nologin

x
x
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

x
x
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

x
x
nobody:x:99:99:Nobody:/:/sbin/nologin

x
x
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin

x
x
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin

x
x
distcache:x:94:94:Distcache:/:/sbin/nologin

x
x
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin

x
x
tcpdump:x:72:72::/:/sbin/nologin

x
x
dbus:x:81:81:System message bus:/:/sbin/nologin

x
x
rpm:x:37:37:RPM user:/var/lib/rpm:/sbin/nologin

x
x
pulse:x:499:497:PulseAudio daemon:/:/sbin/nologin

x
x
polkituser:x:87:87:PolicyKit:/:/sbin/nologin

x
x
apache:x:48:48:Apache:/var/www:/sbin/nologin

x
x
avahi:x:498:494:avahi-daemon:/var/run/avahi-daemon:/sbin/nologin

x
x
openvpn:x:497:493:OpenVPN:/etc/openvpn:/sbin/nologin

x
x
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin

x
x
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin

x
x
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

x
x
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

x
x
hsqldb:x:96:96::/var/lib/hsqldb:/sbin/nologin

x
x
ntp:x:38:38::/etc/ntp:/sbin/nologin

x
x
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

x
x
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin

x
x
squid:x:23:23::/var/spool/squid:/sbin/nologin

x
x
torrent:x:496:491:BitTorrent Seed/Tracker:/var/spool/bittorrent:/sbin/nologin

x
x
backuppc:x:495:490::/var/lib/BackupPC:/usr/bin/nologin

x
x
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin

x
x
gdm:x:42:42::/var/gdm:/sbin/nologin

x
x
ecore:x:500:500:ecore.kevin:/home/ecore:/bin/bash
[root@fc8 tmp]# vi awkpl.pl
#!/usr/bin/perl -w


use strict;
use Getopt::Std;
use vars qw($opt_F $opt_n);
getopt("F:n:");


#print "-F = $opt_F\n";
#print "-n = $opt_n\n";
#print "@ARGV\n";


while(<>)
{
        print ;
#       my @filed = split /$opt_F/,$_;
#       print "$filed[$opt_n]\n";
}
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"awkpl.pl" 20L, 248C


为什么要打印出来xx呢?

我想用perl,实现awk -F: '{print $1}'这样的功能.

#./awkpl.pl -F : -n 0 /etc/passwd

[[i] 本帖最后由 Ecore 于 2008-3-12 18:34 编辑 [/i]]


[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Std;
use vars qw($opt_F $opt_n);
getopt("Fn");
while(<>){
   next if /^\s+$/; #skip the blank lines
   print +(split/$opt_F/)[$opt_n],"\n";;
}

这代码没有问题
我试验过了
[root@fc8 tmp]# ./awktest.pl -F: -n 0 test.txt
1111
aaaa

[root@fc8 tmp]# cat test.txt
1111:2222:3333
aaaa:bbbb:cccc

这样的是没问题.我不知道为什么只要一读/etc/passwd就有上边那个问题..
不好意思.找到问题了.上午测试一个local root exp的时候..passwd文件被破坏了..
#!/usr/bin/perl -w
################################################
#  Author        : Ecore
#  Date          : 2008-03-12
#  Description        : like awk -F: '{print $1}' file
#  Usage        : awkpl.pl -F: -n 0 /etc/passwd       
################################################


use strict;
use Getopt::Std;
use vars qw($opt_F $opt_n);
getopt("F:n:");

sub usage
{
        print "$0 -F : -n 1 filename\n";
        exit;
}


&usage unless (defined($opt_F) && defined($opt_n));

#print "-F = $opt_F\n";
#print "-n = $opt_n\n";
#print "@ARGV\n";

while(<>)
{
        my @filed = split /$opt_F/,$_;
        print "$filed[$opt_n]\n";
}