awk执行行操作及怎样从文本文件和字符串中抽取信..
时间:2005-07-05 来源:sunyone
字符串屏蔽序列
1. 字符转换
2. 格式化输出
3.向一行a w k命令传值
4. awk脚本文件
5. 在awk中使用FS变量
6. 向awk脚本传值
=================================
字符串屏蔽序列
使用字符串或正则表达式时,有时需要在输出中加入一新行或查询一元字符。
打印一新行时,(新行为字符 n),给出其屏蔽序列,以不失其特殊含义,用法为在字符串前加入反斜线。例如使用 n强迫打印一新行。
如果使用正则表达式,查询花括号( { }),在字符前加反斜线,如/ { /,将在a w k中失掉其特殊含义。
代码: |
awk中使用的屏蔽序列 b 退格键 t t a b键 f 走纸换页 d d d 八进制值 n 新行 c 任意其他特殊字符,例如 为反斜线符号 r 回车键 |
使用上述符号,打印May Day,中间夹t a b键,后跟两个新行,再打印May Day,但这次使用八进制数1 0 4、1 4 1、1 7 1、分别代表D、a、y。
代码: |
[root@chenwy sam]# awk 'BEGIN {print" May Day May 104141171"}' May Day May Day |
注意, 1 0 4为D的八进制A S C I I码, 1 4 1为a的八进制A S C I I码,等等。
awk输出函数printf
目前为止,所有例子的输出都是直接到屏幕,除了t a b键以外没有任何格式。a w k提供函数p r i n t f,拥有几种不同的格式化输出功能。例如按列输出、左对齐或右对齐方式。
每一种p r i n t f函数(格式控制字符)都以一个%符号开始,以一个决定转换的字符结束.转换包含三种修饰符。
p r i n t f函数基本语法是p r i n t f([格式控制符],参数),格式控制字符通常在引号里。
printf修饰符
代码: |
- 左对齐 Wi d t h 域的步长,用0表示0步长 . p r e c 最大字符串长度,或小数点右边的位数 表9-7 awk printf格式 % c A S C I I字符 % d 整数 % e 浮点数,科学记数法 % f 浮点数,例如(1 2 3 . 4 4) % g a w k决定使用哪种浮点数转换e或者f % o 八进制数 % s 字符串 % x 十六进制数 |
1. 字符转换
观察A S C I I码中6 5的等价值。管道输出6 5到a w k。p r i n t f进行A S C I I码字符转换。这里也加入换行,因为缺省情况下p r i n t f不做换行动作。
代码: |
A[sam@chenwy sam]$ echo "65" | awk '{printf "%c ",$0}' A |
按同样方式使用a w k得到同样结果。
代码: |
[sam@chenwy sam]$ awk 'BEGIN{printf "%c ",65}' A |
所有的字符转换都是一样的,下面的例子表示进行浮点数转换后‘ 9 9 9’的输出结果。整数传入后被加了六个小数点。
代码: |
[sam@chenwy sam]$ awk 'BEGIN{printf "%f ",999}' 999.000000 |
2. 格式化输出
打印所有的学生名字和序列号,要求名字左对齐, 1 5个字符长度,后跟序列号。注意 n换行符放在最后一个指示符后面。输出将自动分成两列。
代码: |
[root@chenwy sam]# awk '{printf "%-15s %s ",$1,$3}' grade.txt M.Tans 48311 J.Lulu 48317 P.Bunny 48 J.Troll 4842 L.Tansl 4712 |
加入一些文本注释帮助理解报文含义。可在正文前嵌入头信息。注意这里使用p r i n t加入头信息。如果愿意,也可使用p r i n t f。
代码: |
[root@chenwy sam]# awk 'BEGIN{print "Name S.Number"}{printf "%-15s %s ",$1,$3}' grade.txt Name S.Number M.Tans 48311 J.Lulu 48317 P.Bunny 48 J.Troll 4842 L.Tansl 4712 |
3.向一行a w k命令传值
在查看a w k脚本前,先来查看怎样在a w k命令行中传递变量。
在a w k执行前将值传入a w k变量,需要将变量放在命令行中,格式如下:
代码: |
awk 命令变量=输入文件值 |
(后面会讲到怎样传递变量到a w k脚本中)。
下面的例子在命令行中设置变量A G E等于1 0,然后传入a w k中,查询年龄在1 0岁以下的所有学生。
代码: |
[root@chenwy sam]# awk '{if ($5 |
相关阅读 更多 +