由冒号:分离.第7行是用户的登录shell路径.我们可以得出每一个不同shell路径被多少个用户使用:
$perl-F':'-ane'$s{$F[6]}++;'\>;-e'END{print"$_:$s{$_}"forkeys%s}'/etc/passwd
虽然现在不是一行,但是你可以看出使用参数可以解决什么问题.
$/和$\--输入,输出分隔号.
$/用来分隔从文件句柄里读出的数据,缺省$/分隔号是\n,这样每次从文件句柄里就会一行行的读取
$\缺省是空字符,用来自动加到要print的数据尾端.这就是为什么很多时候print都要在末尾加上\n.
$/和$\可与-n-p一起使用.在Perl命令行上相对应为-0(零)和-l(这是L).
-0后面可以跟一个16进制或8进制数值,这个值用来付给$/.
一个文件可以以文本模式或二进制模式打开,这两种的区别是:在文本模式中回车被当成一个字符''\n'',而二进制模式认为它是两个字符0x0d,0x0a。一个文件可以以文本模式或二进制模式打开,这两种的区别是:在文本模式中回车被当成一个字符'\n',而二进制模式认为它是两个字符0x0d,0x0a。只是它提供了更多的功能lopen 以二进制模式打开指定的文件lread 将文件中的数据读入内存缓冲区lwrite 将数据从内存缓冲区写入一个文件lzclose 关闭由lzopenfile 或 lzinit函数打开的一个文件lzcopy 复制一个文件lzinit 这个函数用于初始化内部缓冲区lzopenfile 该函数能执行大量不同的文件处理。
单独使用-l有两个效果:
第一:自动chomp输入分隔号
第二:把$/值付给$\(这样print的时候就会自动在末尾加\n)
1:-l参数,用来给每一个输出加\n.例如
$perl-le'print"HelloWorld"'
使用已有的参数我们可以写出很有效的Perl命令行程序.常见的UnixI/O重定向:
$perl-pe'somecode'>output.txt
这个程序从input.txt读取数据,然后做一些处理再输出到output.txt.你当然也可以把输出重定向到同一个文件里.
上面的程序可以通过-i参数做的更简单些.
2:-i
把源文件更名然后从这个更名的源文件里读取.最后把处理后的数据写入源文件.
如果-i后跟有其他字符串,这个字符串与源文件名合成后来生成一个新的文件名.
此文件会被用来储存原始文件以免被-i参数覆盖.
这个例子把所有php字符替换为perl:
$perl-i-pe's/\bPHP\b/Perl/g'file.txt

程序读取文件的每一行,然后替换字符,处理后的数据重新写入(即覆盖)源文件.
如果不想覆盖源文件,可以使用
$perl-i.bak-pe's/\bPHP\b/Perl/g'file.txt
这里处理过的数据写入file.txt,file.txt.bak是源文件的备份.
perl经典的例子
问题:
遇到一问题:
aaa@domain.com2
aaa@domain.com111
bbb@home.com2222
bbb@home.com1
类似这种输出,我想把他们变换成下面形式:
aaa@domain.com113
bbb@home.com2223
就是将相同邮箱名称后面的数字相加。各位大侠能否给些思路如何用perl来实现。
$ awk '/a/{++cnt} end {print "count = ", cnt}' marks.txt。awk -f ':' 'begin{print "line col user"}{print nr,nf,$1}end{print filename}' passwd。sc=sendchatmessage,") x=nil else print("onupdate",2)t=t end end end f,比如你的交易频道是4,2代表频道数。
如果熟悉了上面几个Perl命令行参数的用法,上面的这个命令应该很好理解:
每次读取urfile的一行,由于使用了-a,打开自动分离(split)模式.空格是缺省的分离号.输入根据分离号被分离然后放入缺省数组@F中,
以文件的第一行为例子$F[0]就是aaa@domain.com,$F[1]就是2
$cnt{$F[0]}+=$F[1]就是一个哈希数组,以$F[0]为key,$F[1]为value,把相同key的数值都叠加起来.然后把文件的每一行都这样处理一次.
从头到尾扫描数组,每扫描到一个数字,判断该数字是否在哈希表中,如果该哈希表还没有这个数字,那么加入哈希表,如果已经存在perl命令行应用程序详,则返回该数字。多数情况下,简单的 for 循环可以逐个遍历那些属性,特别是它们使用有序的数字作为名称的时候,比如数组,或者伪数组(像由 dom 创建的 nodelist 就是伪数组)。像这种数据多的,应该先存放到数组中(因为本例显示的是数字,所以可以直接用循环里面的变量,如果是值,要先存放到数组中,根据索引取出来)。
下面的是上面行命令的文本形式:
#!/usr/bin/perl usestrict; usewarnings;
my%hash; while(<>){ chomp;
my@array=split; $hash{$array[0]}+=$array[1]; }
-- defines a factorial function function fact (n) if n == 0 then return 1 else return n * fact(n-1) end end print("enter a number:") a = io.read("*number") -- read a number print(fact(a)) 。 print "word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])。t = { age = 27 add = function(self, n) selfself.age = self.age+n end } print(t.age) 27 t.add(t, 10) print(t.age) 37 。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-118247-2.html
国内的啤酒也是淡如水