Chinaunix首页 | 论坛 | 博客
  • 博客访问: 880265
  • 博文数量: 254
  • 博客积分: 5350
  • 博客等级: 大校
  • 技术积分: 2045
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-27 13:27
文章分类

全部博文(254)

文章存档

2015年(1)

2014年(9)

2013年(17)

2012年(30)

2011年(150)

2010年(17)

2009年(28)

2008年(2)

分类: LINUX

2009-11-04 16:10:31

                            awk實例(基礎)

print
printf 函數控制輸出格式

date|awk '{print "Month:" $2 "\nYear:" ,$6}'
printf("The number of arguments,ARGC=%d\n",ARGC)
printf 用括號,混合轉換字符一起輸出,要不然使用如下格式
printf %-10s\t%.2f\t%20s\n,$1,$2,$3

[haibin.xie@test ~]$ echo "linux"|awk '{printf "|%-15s|\n",$1}'
|linux          |

[haibin.xie@test ~]$ echo "linux"|awk '{printf "|%15s|\n",$1}'
|          linux|

[root@test awk]# awk '{printf "The name is: %-15s ID is %8d\n",$1,$3}' employees
The name is: Tom             ID is     4424
The name is: Marry           ID is     5346
The name is: Sally           ID is     1654
The name is: Billy           ID is     1683

轉換字符

c 字符
s 字符串
d 十進制數
ld 長十進制數
u  無正負的十進制數
lu 長的無正負之分的十進制數
x  十六進制數
lx 長十六進制數
o 八進制數
lo 長八進制數
e 用科學記數法記錄的浮點數
f 浮點數
g 使用e或者f函數處理過的浮點數,占用最少的空間

輸出小數點后几位用浮點數,如后兩位 %.2f
print 函數可以設置 OFMT 變量,以控制數字的小數位,如:OFMT="%.2f"

====================================================================
[root@test awk]# awk '{print NR,$1,$2,$5, NF}' employees
1 Tom Jones 543354 5
2 Marry Adams 28765 5
3 Sally Chang 65000 5
4 Billy Black 336500 5

[root@test awk]# awk -F '[:\t]' '/Tom Jones/{print $1,$2,$5}' employees2
Tom Jones 4424 543354
可以指定多個分隔符,分隔符都會同時起作用。。

[root@test awk]# awk -F: '/Tom Jones/{print $0}' employees2
Tom Jones:4424:5/12/66: 543354

[root@test awk]# awk '/^[A-Z][a-z]+/' employees2
Tom Jones:4424:5/12/66: 543354
Mary Adams:5346:11/4/63:28765
Sally Chang:1654:7/22/54:650000
Billy Black:1683:9/23/44        336500

[root@test awk]# awk '$1 ~ /[Bb]ill/' employees
Billy Black     1683    9/23/44 336500
[root@test awk]# awk '$1 !~ /[Bb]ill/' employees
Tom Jones       4424    5/12/66 543354
Marry Adams     5346    11/4/63 28765
Sally Chang     1654    7/22/54 65000

[root@test awk]# awk '$5 ~ /[7-9]+/' employees
Marry Adams     5346    11/4/63 28765
一個或多個7-9之間的數

[root@test awk]# awk '$2 !~ /C/{print $1,$2}' employees
Tom Jones
Marry Adams
Billy Black
第二個域不包含字母C就打印域1,2

關系運算符
<  x<= x<=y
== x==y
!= x!=y
>= x>=y
> x>y
~ x~/y/
!~ x!~/y/

awk '$3 * $4 > 500' filename

數學運算符
+ x+y
- x-y
* x*y
/ x/y 除
% x%y 取余
^ x^y 乘方

邏輯運算符
&& 邏輯和(AND)
|| 邏輯或(OR)
! 邏輯非(NOT)
awk '$2 > 5 && $2 <= 15' filename
awk '!($2 < 100 && $3 < 20}' filename  如果兩個條件均為真,則對結果求反
awk '/Tom/,/Suzanne/' file 范圍模板,打印兩個匹配間的行,如果最后一個未找到,則打印到文件的末尾

[root@test awk]# awk '{print ($7 > 28 ? "high "$7:"low "$7)}' grade.txt
high 44
low 26
low 28
low 26
low 28
符合條件時打印?后的字符串否則打印冒號后面的字符串

awk '$3 == "Chris" {$3 = "Christian"; print}' datafile

awk '/Derek/{$8 += 12; print $8}' datafile

awk '{$7 %= 3;print $7}' datafile

阅读(906) | 评论(0) | 转发(0) |
0

上一篇:sed 實例

下一篇:linux 性能調優的几種方法

给主人留下些什么吧!~~