Awk记录和域
awk认为输入的文件是结构的,将每个输入文件行定义为记录,行中的每个字符串定义为域,域之间用空格、TAB键或其他符号分隔,这些符号叫做分隔符。
awk默认空格键是分隔符,TAB键被认为是连续的空格键来处理(两个或多个连续的空格键或tab键当作一个分隔符处理)。
awk可以用-F选项改变分隔符(-F表示改变分隔符,-f表示调用awk脚本);还可以通过在BEGIN字段设置环境变量FS来改变分隔符。举例:
awk -F“\t” '{print $3}' /proc/devices //将分隔符该做 /t TAB键
awk ' BEGIN {FS = “\t”}{print$3} ' /proc/devices //将分隔符该做 /t TAB键
awk定义域操作符$指定执行动作的域,域操作符$后面跟的数字和变量来标识域的位置,每条记录的域从1开始编号,$1表示第一个域,$2表示第二个域,$0表示所有域。举例(分隔符为空格键):
Li Hua 1234567
(n个空格) (n个TAB键)
第一个域($1) 第一个域($2) 第一个域($3)
awk '{print $1 $2 $3}' input //打印三个域的字符串
awk 'BEGIN{one = 1; two = 2}{print $(one+two)}' input //打印第三个域的字符串
awk '{print $0}' input //打印所有域的字符串
不同的输入文件,需要根据实际情况设置相应的分隔符,也可以通过正则表达式将分隔符设置为多个字符。示例:
-
FS = “\t” 将一个tab键作为分隔符
-
FS = “\t+” 将一个或多个tab键作为分隔符
对记录 waz\t\tcq, 1会解释为 waz 空域 cq三个域 , 2 会解释为 waz cq 两个域
本文完全参照 <linux shell 编程从初学到精通> 华清远见嵌入式培训中心 伍之昂等编著