awk默认的字段分隔符是空格,如果你的输入文件中不是以空格作为字段分隔符, 那么你可以使用-F参数来指定分隔符。例如
awk -F, ‘/pattern/ {action}‘ input-file
你也可以设置内置变量FS来完成,FS内置变量只能在BEGIN区域使用。
awk ‘BEGIN {FS=","} {print $2, $3}‘ input-file
当你遇到包含多种字段分隔符时,不用担心,FS完全能搞定,比如:
awk ‘BEGIN {FS="[,:;]"} /pattern/ {action}‘
上面这条命令指定了字段分隔符时逗号,冒号,分号。
FS是输入字段分隔符,OFS是输出字段分隔符。OFS会被打印在输出行的连续两个字段之间。默认情况下,awk会以空格作为输出字段分隔符
例如:
awk -F, ‘BEGIN {OFS=":"} /pattern/ {action}‘ input-file
上面这行代码指定了输出字段分隔符为冒号。
请注意print语句中使用逗号和不使用分号的区别:
使用逗号,则awk在字段之间使用OFS作为输出字段分隔符;
如果不使用分号,则不会使用OFS作为输出字段分隔符;
awk默认的记录分隔符是换行符,我们也可以指定记录分隔符,例如:
awk -F, ‘BEGIN {RS=";"} /pattern/ {action}‘ input-file
上面这行代码中,设置分号作为记录分隔符,那awk就会把分号作为每行直接的分隔符。
RS是出入记录分隔符,ORS是输出记录分隔符。awk默认使用换行符作为输出记录分隔符。
NR变量非常有用,在循环内部标识记录序号。在END区域时,代表输入文件的总记录数
当使用awk处理多个输入文件时,FILENAME就显得非常有用,它代表awk当前正在处理的文件。
NR代表当前awk处理的记录的行号, 在给awk传递两个文件时,NR会在多个文件中持续增加,当处理到第二个文件时,NR不会被重置为1, 而是在前一个文件的NR基础上继续增加。
FNR则只代表当前文件正在处理的记录的行号,不会在第二个文件中继续增加, 当处理到第二个文件时,会重置为1
原文地址:http://www.cnblogs.com/NewMan13/p/7710884.html