论awk的重要性(基础)

论awk的重要性

awk介绍

awk不仅仅时linux系统中的一个命令,而且是一种编程语言,可以用来处理数据生成报告。处理的数据可以是一个或多个文件,可以是来自标准输入,也可以通过管道获取标准输入,awk可以在命令行上直接编辑命令进行操作,也可以编写成awk程序来进行更为复杂的运用。

查看awk的版本

[root@zhuxinwang ~]# awk --version     查看awk的版本
GNU Awk 3.1.7     版本号
Copyright (C) 1989, 1991-2009 Free Software Foundation.

单引号‘{ }’{ }外面是模式(条件) 你想要干什么,相当于筛选 ,或者过滤
类似于sed命令

[root@zhuxinwang ~]# awk '' 文件名

单引号‘{ }’里面是动作 先执行模式,后执行动作

[root@zhuxinwang ~]# awk '{   }' 文件名

Awk格式

先进行冒号的切割成一列一列的,然后在进行条件,相当于是筛选;筛选到第四行的时候匹配到了条件,然后在从第三行到第八行里面进行动作,动作为==$1时候,显示4,5,6,7行的第1列内容==

参数-F
Awk 有参数-F 可以指定awk按照什么符号切割文件内容,资源文件内容切割成一列一列的
Awk 不指定-F参数,awk默认按照空格进行文本的切割。{ }中的print代表输出的意思
$代表取列 $1就是取第一列,以此类推

[root@zhuxinwang benet]# awk -F ":" 'NR>=1 && NR<=3 {print $1}' yunjisuan
root
bin
daemon

以:号作为列 ,然后输出第七列的内容

[root@zhuxinwang benet]# awk -F ":" 'NR>=1 && NR<=3 {print $7}' yunjisuan
/bin/bash
/sbin/nologin
/sbin/nologin

输出第二列内容

[root@zhuxinwang benet]# awk -F ":" 'NR>=1 && NR<=3 {print $2}' yunjisuan
x
x
x

默认以空格当列,因为文件里面没有空格符号,所以没有第二列内容

[root@zhuxinwang benet]# awk -F  'NR>=1 && NR<=3 {print $2}' yunjisuan


$0:默认输出全部内容

[root@zhuxinwang benet]# awk -F ":" 'NR>=1 && NR<=3 {print $0}' yunjisuan
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

NF:默认取每行的最后一组的元素,

[root@zhuxinwang benet]# awk -F ":" 'NR>=1 && NR<=3 {print $NF}' yunjisuan
/bin/bash
/sbin/nologin
/sbin/nologin

“[ ]”中括号里面是正则 可以多用符号
+号:贪婪模式能匹配多就不匹配少

[root@zhuxinwang benet]# awk -F "[:/]" 'NR==2 {print $7}' yunjisuan 
bin
[root@zhuxinwang benet]# awk -F "[:/]+" 'NR==2 {print $7}' yunjisuan 
sbin

Awk –F 参数 ‘BEGIN(开始模块){}模式 {动作}END(结束模块){}’
BEGIN开始模块:告诉awk数据要如何读
通过-F我们可以指定分隔符
我们都知道换行符是 \n
NR这个符号其实真正的含义不是行号。而是数据被读取一段以后,NR就会记录一次。由于awk默认以\n作为每次读数据的结束标志;因此NR就恰好等于行号了。

※假如我们修改awk默认的读数据的时候的默认换行符= > 读入换行符

※我们可以通过BEGIN模块,在awk读取数据之前设定他的读入换行符是谁

※默认awk读入换行符合输出换行符都是\n

修改读入换行符
应为我们设定了读入换行符RS=“:”
因此,在awk的内存里的数据是按照如下排列
1 root 2x 3 0 4 0 5 root 6 /root 7/bin/bash\nbin 8 x 9 1 10 1

由于awk默认输出换行符是\n,因此在输出的时候awk会在内存的行的每行结尾附加输出换行符号\n,因此输出是效果如下:
1 root 2 x 3 0 4 0 5 root 6 /root 7 bin/bash b[root@zhuxinwang benet]# awk ‘BEGIN{RS=":"}{print $0}’ yunjisuan

输入换行符

[root@zhuxinwang benet]# awk 'BEGIN{RS=":"}{print $0}' yunjisuan 
root
x
0
0
root
/root
/bin/bash
bin
x
1
1
bin
/bin
/sbin/nologin
daemon
x
2
2
daemon
/sbin
/sbin/nologin

※NR:代表的是记录符,记录偶从那个行,他是个变量值(相当于读了多少行)
BEGIN模块 开头输入一次 模式{动作} 有几行就是几次 END 模块 结尾输入一次

输出换行符

[root@zhuxinwang benet]# awk 'BEGIN{RS=":";ORS="/"}{print $0}' yunjisuan 
root/x/0/0/root//root//bin/bash
bin/x/1/1/bin//bin//sbin/nologin
daemon/x/2/2/daemon//sbin//sbin/nologin

END结束模块 :告诉awk程序要如何结束
BEGIN模块 开头输入一次 模式{动作} 有几行就是几次 END 模块 结尾输入一次

[root@zhuxinwang benet]# awk 'BEGIN{RS=":";ORS="/"}{print $0}END{print "我要奔跑,不奔跑会停滞"}' yunjisuan 
root/x/0/0/root//root//bin/bash
bin/x/1/1/bin//bin//sbin/nologin
daemon/x/2/2/daemon//sbin//sbin/nologin
/我要奔跑,不奔跑会停滞/

echo –e 处理内容里面的换行符\n,实行换行

[root@zhuxinwang benet]# echo -e "weclome\ni am shi\n shcool"
weclome
i am shi
 shcool

:按单词出现频率降序排序(计算机文件中每个单词的重复数量)
注:此处用sort与uniq
Sort :排序 按着26字符默认排序
Sort -n 按照数字排序
Sort -r 逆转排序

Sort -k* 指定第几列排序

Uniq :去除重复的
Uniq –C 去除重复的同时,显示次数
排序

[root@zhuxinwang benet]# cat yunjisuan  | xargs -n1 | cat yunjisuan  | xargs -n1 | sort | uniq -c | sort  -rn
xargs: /bin/echo: terminated by signal 13
     22 x
     21 sbin
     15 nologin
      9 var
      8 bin
      4 spool
      4 root
      4 bash
      3 uucp
      3 sync
      3 shutdown

Tr:替换命令

[root@zhuxinwang benet]# echo "1:2:3:4:5" | tr ":" "+"
1+2+3+4+5

猜你喜欢

转载自blog.csdn.net/qq_37153289/article/details/83511028