awk 用法详解

Posted yangjuncheng0826

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk 用法详解相关的知识,希望对你有一定的参考价值。

[[email protected] ~]# # awk 参数 ‘模式{动作}‘  文件
[[email protected] ~]# # awk 参数 ‘条件(找谁)  {干啥}‘ 文件
 
[[email protected] ~]# awk -F ":" ‘NR==2{print $2,$4}‘ /etc/passwd
x 1
[[email protected] ~]# cat /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin 
[[email protected] ~]# mkdir -p /server/files
[[email protected] ~]# cd /server/files/
[[email protected] files]# cat >>files<<EOF
> Zhang Dandan 41116397 :250:100:175
> Zhang xiaoyu 390320151:155:90:201
> Meng Feifei  80042789 :250:60:50
> wu Waiwai    70271111 :250:100:175
> wang xiaoai  3515064655 :50:95:135
> Zi  Gege     1986786350  :250:168:200
> Li Youjiu    918391635   :175:75:300
> Lao Nanhai   918391685   :250:100:175
> EOF
[[email protected] files]# ls
files
[[email protected] files]# cat files
Zhang Dandan 41116397 :250:100:175
Zhang xiaoyu 390320151:155:90:201
Meng Feifei  80042789 :250:60:50
wu Waiwai    70271111 :250:100:175
wang xiaoai  3515064655 :50:95:135
Zi  Gege     1986786350  :250:168:200
Li Youjiu    918391635   :175:75:300
Lao Nanhai   918391685   :250:100:175
[[email protected] files]# awk ‘/1/‘ files
Zhang Dandan 41116397 :250:100:175
Zhang xiaoyu 390320151:155:90:201
wu Waiwai    70271111 :250:100:175
wang xiaoai  3515064655 :50:95:135
Zi  Gege     1986786350  :250:168:200
Li Youjiu    918391635   :175:75:300
Lao Nanhai   918391685   :250:100:175
[[email protected] files]# #显示xiaoyu的姓氏和ID号码
[[email protected] files]# awk ‘/xiaoyu/{print$1,$2, $3}‘ files
Zhang xiaoyu 390320151:155:90:201
[[email protected] files]# awk ‘$2~/xiaoyu/‘ files (~号表示匹配xiaoyu的行)
Zhang xiaoyu 390320151:155:90:201
 awk ‘$2~/xiaoyu/{print $1,$2,$3}‘ files (表示第二列中包含xiaoyu的行,精确到某一列的内容)
Zhang xiaoyu 390320151
[[email protected] files]# awk ‘$0~/xiaoyu/‘ files ($0 表示这一整行)
Zhang xiaoyu 390320151  :155:90:201
[[email protected] files]# awk ‘/xiaoyu/‘ files
Zhang xiaoyu 390320151  :155:90:201
[[email protected] files]# awk ‘$3 ~/^41/‘ files
Zhang Dandan 41116397  :250:100:175
Meng Feifei  4180042789   :250:60:50
[[email protected] files]# awk ‘$3 ~/^41/‘ files (第三列以41开头的行)
Zhang Dandan 41116397  :250:100:175
Meng Feifei  4180042789   :250:60:50
# #显示所有已41开头的行的ID号码的人的全名和ID号码
[[email protected] files]# awk ‘$3 ~/^41/{print $1,$2,$3}‘ files
Zhang Dandan   41116397
Meng Feifei       4180042789
## 显示第三例结尾是1或5行的人的全名和ID号码
[[email protected] files]# awk ‘$3~/[1,5]$/‘ files
Zhang xiaoyu 390320151  :155:90:201
wu Waiwai    70271111   :250:100:175
wang xiaoai  3515064655 :50:95:135
Li Youjiu    918391635   :175:75:300
Lao Nanhai   918391685   :250:100:175
[[email protected] files]# awk ‘$3~/[1,5]$/{print $1,$2}‘ files
Zhang xiaoyu
wu Waiwai
wang xiaoai
Li Youjiu
Lao Nanhai
显示第三例结尾是1或5行的人的全名和ID号码
[[email protected] files]# awk ‘$3~/[1,5]$/{print $1,$2,$3}‘ files
Zhang xiaoyu 390320151
wu Waiwai 70271111
wang xiaoai 3515064655
Li Youjiu 918391635
Lao Nanhai 918391685
:冒号替换成$符号
[[email protected] files]# sed ‘s#:#$#g‘ files
Zhang Dandan 41116397  $250$100$175
Zhang xiaoyu 390320151  $155$90$201
Meng Feifei  4180042789   $250$60$50
wu Waiwai    70271111   $250$100$175
wang xiaoai  3515064655 $50$95$135
Zi  Gege     1986786350  $250$168$200
Li Youjiu    918391635   $175$75$300
Lao Nanhai   918391685   $250$100$17
awk ‘{gsub(/匹配/,"替换成什么",$4);print}‘ 固定格式
[[email protected] files]# awk ‘{gsub(/:/,"$",$4);print}‘ files
Zhang Dandan 41116397 $250$100$175
Zhang xiaoyu 390320151 $155$90$201
Meng Feifei 4180042789 $250$60$50
wu Waiwai 70271111 $250$100$175
wang xiaoai 3515064655 $50$95$135
Zi Gege 1986786350 $250$168$200
Li Youjiu 918391635 $175$75$300
Lao Nanhai 918391685 $250$100$175
匹配第二列的/xiaoyu/,并将:替换为$
[[email protected] files]# awk ‘$2~/xiaoyu/{gsub(/:/,"$");print}‘ files (gsub 类似于sed的功能 gsub 表示替换的意思)
Zhang xiaoyu 390320151  $155$90$201
[[email protected] files]# awk ‘/^$/{print NR}‘ /etc/services
22
266
299
320
326
[[email protected] files]# awk ‘/^$/{i=i+1;print i}‘ /etc/services  (统计出现的次数)
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
[[email protected] files]# awk ‘/^$/{i=i+1}END{print i}‘ /etc/services (统计总共有多少行,END表示在awk 执行完毕后再进行计算总共有多少行)先计算后统计
16
 
 
 
 

以上是关于awk 用法详解的主要内容,如果未能解决你的问题,请参考以下文章

awk用法详解

Linux下的awk用法详解

awk 用法详解

1.12-linux三剑客之awk用法详解

awk用法详解

AWK用法入门详解