• 每天进步一点点!

文章分类

推荐网站

常用手册

awk实用程序(二)【原创】

<<返回

2011-12-23 14:20:56

五.文件中的awk命令

如果awk命令别写到文件里,就要用-f选项指定awk的文件名。后面再加所要处理的输入文件的文件名。awk从缓冲区读入一条记录,接着测试awk文件中的每一条命令,如后对读入的记录执行命令。处理完一条记录后,awk将其丢弃,接着将下一条记录读入缓冲区,依次处理所有记录。

cat test_awk.txt 

 

abc     def     hic     lmn     abc

123     456     1.23    4.5     321

ABC     Def     hIc     lmN     ABC

ABC     Def     cih     lmN     dsf

You     are     a       good    boy

That's  a       very    lovely  dog

cat shell.awk 

 

/^ABC/{print "hello world "}

{print $1, $3}

例:

awk -f shell.awk test_awk.txt 

#abc hic
#123 1.23
#hello world

#ABC cih
#hello world

#ABC hIc
#You a
#That's very

 

说明:awk将第一条记录读入缓冲区,用shell.awk中的命令去处理,首先检查这条记录是不是以ABC开头,如果不是则继续对该条记录执行第二条命令,即打印第一和第三个字段。如果是以ABC开头的,则打印'hello world'和一个换行,然后再执行第二条命令打印第一和第三个字段。执行完第一条记录后,将其丢弃,然后读入第二条记录,执行上述操作。直到所有记录都处理完毕。

 

六、记录和字段

1.记录

记录:默认情况下,一行称为一条记录,以换行符结束。

记录分隔符:默认情况下,输入和输出记录的分隔符(行分隔符)都是回车符(换行符),分别保存在awk的内置变量ORS(output record separator)和RS(record separator)中,ORS和RS可以以特定的形式修改。

变量$0:awk用$0指代整条记录。

变量NR:当前已读的记录数,每条记录的记录号都保存在awk的内置变量NR中,每处理完一条记录,NR的值都会加一。

例.

awk '{print NR, $0}' test_awk.txt 

#1 abc     def     hic     lmn     abc
#2 123     456     1.23    4.5     321
#3 ABC     Def     hIc     lmN     ABC
#4 ABC     Def     cih     lmN     dsf
#5 You     are     a       good    boy
#6 That's  a       very    lovely  dog

 

2.字段

每条记录都是由字段组成的,默认情况下,字段之间是有空白符(即空格符和制表符)分割。awk在内置变量NF中保存记录的字段数。

3.字段和分隔符

输入字段分隔符:awk的内置变量FS保存着输入字段分隔符的值。使用FS默认值时,awk用制表符或空格来分割字段,并且删除各字段前多余的空格和制表符。可以通过在BEGIN语句中或命令行上赋值来改变FS的值。

从命令行改变字段分隔符:在命令行上改变FS的值徐啊哟使用-F选项,后面指定代表新分隔符的字符。

例:

awk -F : '/root/{print $1, $2, $6}' /etc/passwd 

#root x /root
#operator x /root

说明:awk通过-F选项后面指定的冒号作为新的分隔符。

使用多个字段作为分隔符:如果有多个字段被用作字段分隔符FS,则FS对应的是一个正则表达式字符串,并且别括在方括号中。

例:

cat test

abc:bca cba     cab

bca     abc acb:bac

 

awk -F'[: 	]' '{print $1, $3}' test

#abc cba
#bca acb

 

说明:当遇到冒号、空格和制表符时,awk会把它当做字段分隔符,这个表达式两头加了引号,这样就不会呗shell当做自己的元素符来解释了。

输出字段分隔符:默认的输出字段分隔符是单个空格,被保存在awk的内置变量OFS。无乱OFS如何设置,print语句中用于分隔字段的逗号,在输出时都会被转换成OFS的值。OFS可以通过在BEGIN语句来改变。

上一篇:awk实用程序(一)

下一篇:awk实用程序(三)

文章评论

  • 暂无评论

发表评论

昵称:

内容:

发表评论