首先认识一下 将默认的空格换成制表符分割,或者其他形式的分割
没做任何改变前:
[root@g script]# awk -F, '{print $1,$2,$3}' example
101 jesn Doe CEO
102 Jason Smith IT Manager
103 Raj Reddy Sysadmin
104 Anand Ram Developer
105 Jane Miller Sales Manager
做了改变后:
[root@g script]#
[root@g script]# awk 'BEGIN{FS=","; OFS="\t"}{print $1,$2,$3}' example
101 jesn Doe CEO
102 Jason Smith IT Manager
103 Raj Reddy Sysadmin
104 Anand Ram Developer
105 Jane Miller Sales Manager
BEGIN是预处理,那么就可以在预处理的时候将打印一些文件,注意类似c语言,要在借宿加上分号
[root@g script]# awk 'BEGIN{FS=","; OFS="\t"; print "========"}{print $1,$2,$3}' example
========
101 jesn Doe CEO
102 Jason Smith IT Manager
103 Raj Reddy Sysadmin
104 Anand Ram Developer
105 Jane Miller Sales Manager
[root@g script]# awk 'BEGIN{FS=","; OFS="\t"; print "========"}{print $1,$2,$3} END{print "+++++++++++"}' example
========
101 jesn Doe CEO
102 Jason Smith IT Manager
103 Raj Reddy Sysadmin
104 Anand Ram Developer
105 Jane Miller Sales Manager
+++++++++++
1:
可以处理多种分隔符:
现在原文是这样
101,jesn Doe%CEO
102,Jason Smith:IT Manager
103,Raj Reddy;Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
则现在文中既有逗号,百分号,冒号,引号分割的
那处理起来就是这样
[root@g script]#
[root@g script]# awk 'BEGIN{FS="[,%:;]";OFS="\t"}{print $1,$2,$3}' example
101 jesn Doe CEO
102 Jason Smith IT Manager
103 Raj Reddy Sysadmin
104 Anand Ram Developer
105 Jane Miller Sales Manager
2:
指定分隔符,并换行
主要是用RS处理  (RS 的作用是制定换行的符号;)
原文件是这样
[root@g script]# cat tmp
103
Raj Reddy
Sysadmin
-
104
Anand Ram
Developer
-
105
Jane Miller
Sales Manager
这里我们可以将\n 作为一个预分割符FS,则整个数据文件相当于一行,那么输出要求是以;区分开,则OFS就是 ;  那么显然这里要用到RS,RS就是很显然用  -\n  作为分割符  则就分成了3行,然后打印出 文件就可以了
处理后:
[root@g script]#
[root@g script]# awk ' BEGIN{FS="\n";OFS=":";RS="-\n"}{print $1,$2,$3}' tmp
103:Raj Reddy:Sysadmin
104:Anand Ram:Developer
105:Jane Miller:Sales Manage
3:win文件和linux文件互转的格式变化
首先win文件是以/r/n作为一行的借宿,  而 linux 则是以/n作为一行的结束;
现在讲linux 下文件传到 win下
则是使用RS=“/n” ORS="/r/n"  即可
如果是win下向linux下穿文件则反过来就可以
4:NR内置变量:打印行号    FILENAME 文件名
[root@g script]# awk '/John/ {print NR,$0}' example
1 101,John Doe,CEO
[root@g script]# awk '/John/ {print FILENAME, NR,$0}' example
example 1 101,John Doe,CEO
NR第二个牛逼的作用是作为 匹配次数来用:
[root@g script]# awk '/10/{print NR,$0 }END{ print "the sum NUmber is " NR}' example
1 101,John Doe,CEO
2 102,Jason Smith,IT Manager
3 103,Raj Reddy,Sysadmin
4 104,Anand Ram,Developer
5 105,Jane Miller,Sales Manager
the sum NUmber is 5