linux系统中awk命令

 

1、测试数据

[root@PC3 test]# cat a.txt
34 rtd 78
98 fgg 345
23 fgg 668
45 dfs 23
10 fsd 35
77 jla 35
87 saf 45
53 sfg 2334
46 wrt 098

 

2、awk命令显示特定列

[root@PC3 test]# awk '{print $1}' a.txt  ## 显示第一列
34
98
23
45
10
77
87
53
46
[root@PC3 test]# awk '{print $1,$3}' a.txt  ## 显示第一列和第三列
34 78
98 345
23 668
45 23
10 35
77 35
87 45
53 2334
46 098
[root@PC3 test]# awk '{print $0}' a.txt  ## 显示所有列
34 rtd 78
98 fgg 345
23 fgg 668
45 dfs 23
10 fsd 35
77 jla 35
87 saf 45
53 sfg 2334
46 wrt 098

 

2、awk命令删除列

[root@PC3 test]# cat a.txt
34 rtd 78
98 fgg 345
23 fgg 668
45 dfs 23
10 fsd 35
77 jla 35
87 saf 45
53 sfg 2334
46 wrt 098
[root@PC3 test]# awk '{$2="";print $0}' a.txt ## 删除第二列
34  78
98  345
23  668
45  23
10  35
77  35
87  45
53  2334
46  098
[root@PC3 test]# awk '{$1="";$2="";print $0}' a.txt  ## 删除第一列和第三列
  78
  345
  668
  23
  35
  35
  45
  2334
  098

 

awk删除列不能够删除空格!将多个空格或者制表符转换为一个空格的方法:

[root@PC3 test]# awk '{$2="";print $0}' a.txt
34  78
98  345
23  668
45  23
10  35
77  35
87  45
53  2334
46  098
[root@PC3 test]# awk '{$2="";print $0}' a.txt | sed 's/[\t ]\+/ /'  ## 将多个空格或者制表符转换为一个空格
34 78
98 345
23 668
45 23
10 35
77 35
87 45
53 2334
46 098

 

[root@PC3 test]# awk '{$1="";$2="";print $0}' a.txt
  78
  345
  668
  23
  35
  35
  45
  2334
  098
[root@PC3 test]# awk '{$1="";$2="";print $0}' a.txt | sed 's/^[\t ]*//g'  ## 删除行首空格
78
345
668
23
35
35
45
2334
098

 

3、awk命令指定读取分割符

[root@PC3 test]# cat a.txt
34_rtd_78
98_fgg_345
23_fgg_668
45_dfs_23
10_fsd_35
77_jla_35
87_saf_45
53_sfg_2334
46_wrt_098
[root@PC3 test]# awk '{print $1}' a.txt   ## awk的复制分割符为空格或者制表符,因此输出了所有的内容
34_rtd_78
98_fgg_345
23_fgg_668
45_dfs_23
10_fsd_35
77_jla_35
87_saf_45
53_sfg_2334
46_wrt_098
[root@PC3 test]# awk -F "_" '{print $1}' a.txt  ## 指定输入分割符为_.
34
98
23
45
10
77
87
53
46
[root@PC3 test]# awk -F "_" '{print $1,$2}' a.txt
34 rtd
98 fgg
23 fgg
45 dfs
10 fsd
77 jla
87 saf
53 sfg
46 wrt

 

[root@PC3 test]# awk 'BEGIN{FS="_"}{print $1}' a.txt   ## 利用FS指定分割符
34
98
23
45
10
77
87
53
46
[root@PC3 test]# awk 'BEGIN{FS="_"}{print $1,$2}' a.txt
34 rtd
98 fgg
23 fgg
45 dfs
10 fsd
77 jla
87 saf
53 sfg
46 wrt

 

4、awk指定输出分割符

[root@PC3 test]# cat a.txt
34 rtd 78
98 fgg 345
23 fgg 668
45 dfs 23
10 fsd 35
77 jla 35
87 saf 45
53 sfg 2334
46 wrt 098
[root@PC3 test]# awk '{print $1,$3}' a.txt
34 78
98 345
23 668
45 23
10 35
77 35
87 45
53 2334
46 098
[root@PC3 test]# awk '{OFS="!"}{print $1,$3}' a.txt  ## 指定输出分隔符为!
34!78
98!345
23!668
45!23
10!35
77!35
87!45
53!2334
46!098

 

同时指定多个分隔符:

[root@PC3 test]# cat b.txt  ## 测试数据
3_d_5_k
a 2 8 f
4:8:2:d
[root@PC3 test]# awk '{print $1,$3}' b.txt  ## awk的默认读取分隔符为空格或者制表符
3_d_5_k
a 8
4:8:2:d
[root@PC3 test]# awk -F "[_ ]" '{print $1,$3}' b.txt ## 指定分隔符为_或者空格
3 5
a 8
4:8:2:d
[root@PC3 test]# awk -F "[_ :]" '{print $1,$3}' b.txt ## 指定分割符为_或者空格或者:.
3 5
a 8
4 2

 

 

5、awk命令打印行数

[root@PC3 test]# awk '{print NR,$0}' a.txt
1 34 rtd 78
2 98 fgg 345
3 23 fgg 668
4 45 dfs 23
5 10 fsd 35
6 77 jla 35
7 87 saf 45
8 53 sfg 2334
9 46 wrt 098

 

6、awk打印列数

[root@PC3 test]# awk '{print NF}' a.txt
3
3
3
3
3
3
3
3
3

 

7、awk打印匹配行

[root@PC3 test]# cat a.txt
34 rtd 78
98 fgg 345
23 fgg 668
45 dfs 23
10 fsd 35
77 jla 35
87 saf 45
53 sfg 2334
46 wrt 098
[root@PC3 test]# awk '$1 ~ /45/{print $0}' a.txt  ## 打印第一列匹配45的行
45 dfs 23
[root@PC3 test]# awk '$2 ~ /fgg/{print $0}' a.txt  ## 打印第二列匹配fgg的行
98 fgg 345
23 fgg 668
[root@PC3 test]# awk '$2 ~ /fgg/ && $3 ~ /345/{print $0}' a.txt  ## 打印第二列匹配fgg,同时第三列匹配345的行
98 fgg 345

 

8、awk依据数值大小过滤行

[root@PC3 test]# cat a.txt
34 rtd 78
98 fgg 345
23 fgg 668
45 dfs 23
10 fsd 35
77 jla 35
87 saf 45
53 sfg 2334
46 wrt 098
[root@PC3 test]# awk '$1 > 50 {print $0}' a.txt   ## 过滤第一列大于50的行
98 fgg 345
77 jla 35
87 saf 45
53 sfg 2334
[root@PC3 test]# awk '$1 > 50 && $2 ~ /fgg/ {print $0}' a.txt  ## 同时满足两个条件
98 fgg 345

 

而且与或者

[root@PC3 test]# cat a.txt
34 rtd 78
98 fgg 345
23 fgg 668
45 dfs 23
10 fsd 35
77 jla 35
87 saf 45
53 sfg 2334
46 wrt 098
[root@PC3 test]# awk '$1 >= 30 && $1 <= 80 {print $0}' a.txt  ## 大于30而且小于80
34 rtd 78
45 dfs 23
77 jla 35
53 sfg 2334
46 wrt 098
[root@PC3 test]# awk '$1 <= 30 || $1 >= 80 {print $0}' a.txt  ## 小于30 或者 大于80
98 fgg 345
23 fgg 668
10 fsd 35
87 saf 45

 

 

9、awk  if条件分支

[root@PC3 test]# cat a.txt
34 rtd 78
98 fgg 345
23 fgg 668
45 dfs 23
10 fsd 35
77 jla 35
87 saf 45
53 sfg 2334
46 wrt 098
[root@PC3 test]# awk '{if($1 > 20){print $0}}' a.txt  ## 根据第一列进行判断
34 rtd 78
98 fgg 345
23 fgg 668
45 dfs 23
77 jla 35
87 saf 45
53 sfg 2334
46 wrt 098
[root@PC3 test]# awk '{if($1 > 20){print $0} else {print $1}}' a.txt  
34 rtd 78
98 fgg 345
23 fgg 668
45 dfs 23
10
77 jla 35
87 saf 45
53 sfg 2334
46 wrt 098

 

[root@PC3 test]# cat a.txt
34 rtd 78
98 fgg 345
23 fgg 668
45 dfs 23
10 fsd 35
77 jla 35
87 saf 45
53 sfg 2334
46 wrt 098
[root@PC3 test]# awk '{if($1 > 80){print $0} else if($1 > 50) {print $1,$2} else {print $1}}' a.txt
34
98 fgg 345
23
45
10
77 jla
87 saf 45
53 sfg
46

 

10、awk输出奇数行、偶数行和整倍数行

[root@PC3 test]# cat a.txt
1 34 rtd 78
2 98 fgg 345
3 23 fgg 668
4 45 dfs 23
5 10 fsd 35
6 77 jla 35
7 87 saf 45
8 53 sfg 2334
9 46 wrt 098
[root@PC3 test]# awk '{if(NR%2 == 0){print $0}}' a.txt  ## 取偶数行
2 98 fgg 345
4 45 dfs 23
6 77 jla 35
8 53 sfg 2334
[root@PC3 test]# awk '{if(NR%2 != 0){print $0}}' a.txt   ## 取奇数行
1 34 rtd 78
3 23 fgg 668
5 10 fsd 35
7 87 saf 45
9 46 wrt 098
[root@PC3 test]# awk '{if(NR%3 == 0){print $0}}' a.txt  ## 取3倍整数行
3 23 fgg 668
6 77 jla 35
9 46 wrt 098

 

11、awk 列之间的四则运算

[root@PC3 test]# cat a.txt
34 rtd 78
98 fgg 345
23 fgg 668
45 dfs 23
10 fsd 35
77 jla 35
87 saf 45
53 sfg 2334
46 wrt 098
[root@PC3 test]# awk '{print $1 + $3}' a.txt  ## 求和
112
443
691
68
45
112
132
2387
144
[root@PC3 test]# awk '{print $1 - $3}' a.txt  ## 差
-44
-247
-645
22
-25
42
42
-2281
-52
[root@PC3 test]# awk '{print $1 * $3}' a.txt  ## 积
2652
33810
15364
1035
350
2695
3915
123702
4508
[root@PC3 test]# awk '{print $1 / $3}' a.txt  ## 商
0.435897
0.284058
0.0344311
1.95652
0.285714
2.2
1.93333
0.0227078
0.469388
[root@PC3 test]# awk '{print $1 % $3}' a.txt  ##余数
34
98
23
22
10
7
42
53
46

 

12、awk求列的和以及平均数

[root@PC3 test]# cat a.txt
34 rtd 78
98 fgg 345
23 fgg 668
45 dfs 23
10 fsd 35
77 jla 35
87 saf 45
53 sfg 2334
46 wrt 098
[root@PC3 test]# awk '{sum += $1}END{print sum}' a.txt  ## 求第一列的和
473
[root@PC3 test]# awk '{sum += $1}END{print sum/NR}' a.txt  ## 求第一列的平均数
52.5556

 

13、awk 引入变量值

[root@PC3 test]# cat a.txt
34 rtd 78
98 fgg 345
23 fgg 668
45 dfs 23
10 fsd 35
77 jla 35
87 saf 45
53 sfg 2334
46 wrt 098
[root@PC3 test]# a=2
[root@PC3 test]# awk -v b=$a '{print $b}' a.txt
rtd
fgg
fgg
dfs
fsd
jla
saf
sfg
wrt

 

14、awk 统计特定字符在一行中出现的次数

[root@PC3 test]# cat a.txt
34 rtd 78
98 fgg 345
23 fgg 668
45 dfs 23
10 fsd 35
77 jla 35
87 saf 45
53 sfg 2334
46 wrt 098
[root@PC3 test]# awk -F "3" '{print NF-1}' a.txt  ## 统计3在每一行中出现的次数
1
1
1
1
1
1
0
3
0

 

15、awk命令删除空行

[root@PC3 test]# cat -A a.txt
34 rtd 78$
98 fgg 345$
23 fgg 668$
$
45 dfs 23$
10 fsd 35$
77 jla 35$
87 saf 45$
53 sfg 2334$
46 wrt 098$
[root@PC3 test]# awk NF a.txt
34 rtd 78
98 fgg 345
23 fgg 668
45 dfs 23
10 fsd 35
77 jla 35
87 saf 45
53 sfg 2334
46 wrt 098

 

16 、awk命令忽略大小写

[root@PC3 test]# cat a.txt
3 a d
9 k a
2 h A
c 3 k
1 z c
3 A 5
[root@PC3 test]# awk '/a/' a.txt
3 a d
9 k a
[root@PC3 test]# awk '/A/' a.txt
2 h A
3 A 5
[root@PC3 test]# awk 'BEGIN{IGNORECASE=1} /a/' a.txt
3 a d
9 k a
2 h A
3 A 5

 

17、awk 命令大小写转换

[root@PC3 test]# cat a.txt
3 a d
9 k a
2 h A
c 3 k
1 z c
3 A 5
[root@PC3 test]# awk '{print toupper($0)}' a.txt
3 A D
9 K A
2 H A
C 3 K
1 Z C
3 A 5
[root@PC3 test]# awk '{print tolower($0)}' a.txt
3 a d
9 k a
2 h a
c 3 k
1 z c
3 a 5
[root@PC3 test]# awk '{print toupper($2)}' a.txt
A
K
H
3
Z
A

 

18、awk命令计算某一类文件总的大小

[root@PC3 sheep]# ls
a.ped  result.map  result.ped  tr.map
[root@PC3 sheep]# ls -lh
total 1.1G
-rw-r--r--. 1 root root 204M Jan 30 11:33 a.ped
-rw-r--r--. 1 root root  20M Jan 14 11:33 result.map
-rw-r--r--. 1 root root 829M Jan 14 11:33 result.ped
-rw-r--r--. 1 root root 7.4M Jan 30 11:33 tr.map
[root@PC3 sheep]# ls -l *.map | awk '{sum +=$5}END{print sum/(1024*1024),"Mb"}'
26.9319 Mb

 

19、awk命令依据行的长度进行筛选

[root@PC3 test]# cat a.txt
3
9k
2hA
cfsd
1zc3d
3A5sdf
asfdfds
safssdff
sfafsfsfa
asfdfdfsee
[root@PC3 test]# awk 'length == 3' a.txt
2hA
[root@PC3 test]# awk 'length == 6' a.txt
3A5sdf
[root@PC3 test]# awk 'length > 6' a.txt
asfdfds
safssdff
sfafsfsfa
asfdfdfsee
[root@PC3 test]# awk 'length < 4' a.txt
3
9k
2hA
[root@PC3 test]# awk 'length > 2 && length < 6' a.txt
2hA
cfsd
1zc3d

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


系ubuntu 下面打开终端输入:sudo apt-get install sendmail一般就安装完成噶啦跟住进入 /etc/mail/目录输入:m4 sendmail.mc &gt; sendmail.cf意思系跟住.mc文件 生成 sendmial.cf文件输入呢个命令:ps aux | g
依家我有1个软件goagent目录(大家懂得) 放在/home/gateman/Programs/ 下 1. proxy.py 入面有1个 proxy.py 文件 放在/home/gateman/Programs/goagent/local/ 入面 2.breakwall.sh 我在 proxy.p
其实我想讲的是 cp -L关于-L参数的解释:-L, --dereference always follow symbolic links in SOURCE意思是如果复制目标是1个软链接,则复制链接的目标 不是链接本身做个例子: 例如 ~/tmp/fo1 入面有1个c.txt 文件 和 指向他的软
原地址:http://www.rjgc.net/control/content/content.php?nid=4418 1、将文件checkout到本地目录svn checkout path(path是服务器上的目录)例如:svn checkout svn://192.168.1.1/pro/do
chroot,即 change root directory (更改 root 目录)。在 linux 系统中,系统默认的目录结构都是以 `/`,即是以根 (root) 开始的。而在使用 chroot 之后,系统的目录结构将以指定的位置作为 `/` 位置。实例:用live CD ubuntu假设你的
简单解析下, stdin就是标准输入, stdout就是标准。举个例子, 在当前我要打包1个文件夹 /var/log/ 到当前目录下,并用zip压缩,那么我们可以分步执行#tar -cvf log.tar /var/log/#zip -r log.tar.zip log.tar#rm -rf log
转自:http://man.ddvip.com/linux/Mandrakelinuxref/process-priority.html系统中运行的每个进程都有一个优先级(亦称“nice 值”),其范围从 -20 (最高优先级)到 19 (最低优先级)。默认情况下,进程的优先级是 0 (“基本”调度
str=&quot;/home/gateman&quot; if [ ${str:0:1} = &quot;/&quot; ]; then echo &quot;yes&#39;fi ${str:0:1} 中0表示从第几个字符开始,1表示截取多长
转自:http://kwokchivu.blog.51cto.com/1128937/694347 在RedHat系统下用usermod 命令可把某用户添加进多个附属组,默认情况下,一次性添加多个附属组可用以下方式来添加: usermod -G 附属组1,附属组2,...,附属组X 用户名 但在添加
有个文件 test.txt 内容如下:bash-3.00$ cat test.txt user user user_hiuser #注:呢行系空行T JGATEMANGATTTTTEMANGABBEMANAAABbash-3.00$下面介绍下常用的通配符 配合grep 命令:1. &quot;.&q
linux系统为每1个文件都分配有i索引节点(inode),系统根据呢d节点从磁盘找出数据。 一般来讲,每1个文件名(包含全路径)实际上都链接住1个i索引节点。inode实际上系乜咧? 其实可以算系1个指向磁盘具体位置(柱面,扇区之类)的指针, 系统分析某个文件的inode,得出磁盘柱面,扇区等数据
grep 可以立即为筛选, 一般的用法系 grep + 要查询的字段 + 文件(或者内容 例如| 传递既内容)1.grep + 要查询的字段 + 文件gateman@GPC:~/shell/SQL_GSI$ grep OID a.sqlWHERE OID=@BuildNOWHERE OID INWH
原文转自:http://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/index.html开始之前人类大脑对文字的处理是平面式的,所以我们浏览文章、查找资料或者重构代码,要么是横向读,要么是纵向读,要么使用搜索功能,将文字作为一个平面整体。而在
PS:偶很喜欢用scp这个命令来传输数据。scp命令跟cp命令类似,只不过cp命令是在同一台机器上用的,scp是在两台机器上复制传输数据的命令。scp实质相当于利用SSH协议来传输数据的cp命令。 用法举例: 1、复制远程服务器的文件到本地: scp -P888 root@120.18.50.33:
打开终端,进入/bin/ls 一下会见到 bash sh 呢两个文件。其实距地系两个唔同既shell 解析器。如果在脚本a.sh 开头写入#!/bin/sh那么执行./a.sh 时候 就相当于 sh a.sh同理 开头写入#!/bin/bash执行./a.sh 时候 就相当于 bash a.sh如果
find查找文件的时候排除某个或几个文件或目录转自:http://www.cnblogs.com/starspace/archive/2008/10/20/1315380.html比如要在/usr/sam目录下查找不在dir1子目录之内的所有文件find /usr/sam -path &quot;/
假设有变量 var=http://www.google.com/test.htm一 # 号截取,删除左边字符,保留右边字符。echo ${var#*//}其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符即删除 http://结果是 :www.goog
转自: http://edyfox.codecarver.org/html/_vimrc_for_beginners.htmlVIM 中可供用户定制的选项非常非常多,作为初学者,我们没有必要了解这么多东西。下面,滇狐简单列出了一些最常用的配置项,大家可以根据自己的需要将这些内容添加到自己的 .vim
转自:http://www.einit.com/user1/11/archives/2006/3603.htmlUnix/Linux下一般想让某个程序在后台运行,很多都是使用 &amp; 在程序结尾来让程序自动运行。比如我们要运行mysql在后台: /usr/local/mysql/bin/mysq
首先, mount是类unix系统, 挂载设备到1个文件夹的操作命令, 注意系设备阿正常来讲,mount 是不能挂在文件夹到文件夹的。例如, 在我的~/tmp/ 目录中有两个文件夹fo1 fo2其中fo1 中有3个文件a.txt b.txt c.txt fo2 有4个 e.txt d.txt e.t