Format:
awk '/pattern/' file
awk '{action}' file
awk '/pattern/ {action}' file
pattern, 模式,由正则表达式、判别条件真伪的表达式或二者的组合构成。
awk用$0表示整条纪录,纪录中的各个字段默认以空格作为分隔符,分别为$1,$2,$3等等。
变量NR表示纪录号。
变量NF表示纪录中的字段数。
~
匹配操作符
jili@jili-desktop:~/test$ awk '$2 ~ /Ada/' txt
Marry Adams 5346 11/4/63 28765
显示第二个字段中含有Ada的纪录
Marryjili@jili-desktop:~/test$ awk '$2 !~ /Ada/' txt
Tom Jones 4424 5/12/66 543354
Sally Chang 1654 7/22/54 650000
Billy Black 1683 9/23/44 336500
Jones Tom
显示第二个字段中不含有Ada的纪录
元字符
^
行首定位符
$
行尾定位符
.
匹配一个字符
*
匹配零个或多个前导字符
+
匹配一个或多个前导字符
?
匹配零个或一个前导字符
[ABZ]
匹配ABZ一组字符中的任一个
[^ABZ]
匹配不在指定字符ABZ内的字符
A|B
匹配A或B
(AB)+
匹配一个或多个AB的组合,如AB, ABAB, ABABAB
\*
匹配星号本身
&
用在替代串中,代表查找串中匹配到的内容
Example
Sample text:
--------------------------------------------------------------------
Tom Jones 4424 5/12/66 543354
Marry Adams 5346 11/4/63 28765
Sally Chang 1654 7/22/54 650000
Billy Black 1683 9/23/44 336500
------------------------------------------------------------------------
jili@jili-desktop:~/test$ awk '/Tom/' txt
Tom Jones 4424 5/12/66 543354
jili@jili-desktop:~/test$ awk '/Tom/{print $1,$2}' txt
Tom Jones
jili@jili-desktop:~/test$ awk '{print $1,$2}' txt
Tom Jones
Marry Adams
Sally Chang
Billy Black
jili@jili-desktop:~/test$
jili@jili-desktop:~/test$ date | awk '{ print "Month:" $2 "\nYear:" $6 }'
Month:Jan
Year:2010
print 函数的参数可以是变量、数值或字符串常量。
jili@jili-desktop:~/test$ echo "linux unix" | awk '{ printf "my system is @%-20s@\n", $1 }'
my system is @linux @
jili@jili-desktop:~/test$ echo "linux unix" | awk '{ printf "my system is @%20s@\n", $1 }'
my system is @ linux@
printf 函数可用于格式化输出
jili@jili-desktop:~/test$ awk '{print NR,$0}' txt
1 Tom Jones 4424 5/12/66 543354
2 Marry Adams 5346 11/4/63 28765
3 Sally Chang 1654 7/22/54 650000
4 Billy Black 1683 9/23/44 336500
变量NR表示纪录号。
jili@jili-desktop:~/test$ awk '{print $0, NF}' txt
Tom Jones 4424 5/12/66 543354 5
Marry Adams 5346 11/4/63 28765 5
Sally Chang 1654 7/22/54 650000 5
Billy Black 1683 9/23/44 336500 5
变量NF表示纪录中的字段数。
阅读(606) | 评论(0) | 转发(0) |