[root@localhost ~]# cat passwd 
root:x:0:0:root:/root:/bin/bash
root:0:0:root:/root:/bin/bash
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:4294967294:4294967294:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
avahi-autoipd:x:100:104:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
u02:x:501:500::/home/u02:/bin/bash
apache:x:48:48:Apache:/var/www:/sbin/nologin

要得到文件名,行号,每行的列数,内容。
[root@test03 scripts]# awk -F ':' '{print "filename:"FILENAME"\t""linenumber:"NR"\t""columns:"NF"\t""linecontent:"$0}' passwd 

[root@localhost ~]# awk -F':' '{printf("filename:%s\tlinenumber:%s\tcolumns:%s\tlinecontent:%s\n",FILENAME,NR,NF,$0)}' passwd 

filename:passwd	linenumber:1	columns:7	linecontent:root:x:0:0:root:/root:/bin/bash
filename:passwd	linenumber:2	columns:6	linecontent:root:0:0:root:/root:/bin/bash
filename:passwd	linenumber:3	columns:7	linecontent:oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
filename:passwd	linenumber:4	columns:7	linecontent:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
filename:passwd	linenumber:5	columns:7	linecontent:rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
filename:passwd	linenumber:6	columns:7	linecontent:nfsnobody:x:4294967294:4294967294:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
filename:passwd	linenumber:7	columns:7	linecontent:avahi-autoipd:x:100:104:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
filename:passwd	linenumber:8	columns:7	linecontent:u02:x:501:500::/home/u02:/bin/bash
filename:passwd	linenumber:9	columns:7	linecontent:apache:x:48:48:Apache:/var/www:/sbin/nologin


print和printf

awk中同时提供了print和printf两种打印输出的函数。

其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。

printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。