linux系统运维三剑客

  

一。AWK
1. AWK必备基本概念
。$ 0 $ 1、$ 2概念
0美元在没有指定区域或分隔符的情况下默认输出文件里的所有内容,
如果指定了区域,比如像下面这样,那么会输出区域的某几行。
1和2美元是指输出被FS字段分隔符分隔之后的第一列和第一列数据

  
 <代码> [root@localhost ~] # awk的NR==1{打印$ 0}’/etc/passwd
  根:x: 0时:根:根://bin/bash
  (root@localhost ~) # awk的NR==2{打印$ 0}’/etc/passwd
  本:x: 1:1:本:/bin:/sbin/nologin
   
  

b.NF、NR、FS、RS
FS:字段分隔符,可以用- f来指定字段分隔符;默认是空格
RS:记录分隔符,默认是每行末尾的换行符\ n,可以统计行数
NF:区域号,一般不用于指定第几列。NF美元指的是最后一列,可与打印联合使用
NR:行号,可以指定行号取数据,同时可以统计文件里的总共行数

  
 <代码> [root@localhost ~] # awk - f”:“‘{打印用户名:“$ 1”\ t \进程:“$ 3}"/etc/passwd |头2
  用户名:根uid: 0
  用户名:本uid: 1
   
  

\ t是空格的意思

  

题目1:要求输出/etc/passwd文件里的倒数第二行数据

  
 <代码> [root@localhost ~] # awk结束{打印NR}/etc/passwd
  47  
  

先利用端模块取出所有行,再指定倒数第二行的行数。

  

题目2:要求将一些被换行符分隔的字段输出为一行

  
 <代码> [root@localhost jizuo] # vim awk/测试- 1. - txt
  mmy黄鼠狼
  100年愉快的开车
  12345年旧金山,CA
  
  大Tony
  隐身大街200号。
  郊区,佤邦67890
  [root@localhost jizuo] # awk开始{FS=" \ n "; RS=" "}{打印$ 1”、“2”、“3美元}的awk/测试- 1. - txt
  mmy黄鼠狼,100年愉快的开车,旧金山,CA 12345
  大Tony,隐身大街200号,郊区,佤邦67890  
  

所用方法是将行分隔符(RS)由换行符改为空或空行;将FS(字段分隔符)由默认的空格改为换行符。
此种方法也有局限,就是只能输出指定字段的文件成一行,如果是无限行数据呢,可以采用下面的方法:

  
 <代码> root@localhost jizuo] # awk的开始{RS=癊OF”} {gsub (\ n/, ", ");打印}的awk/测试- 1. - txt
  mmy黄鼠狼,100愉快的驱动器,旧金山CA 12345大托尼,隐身大街200号,郊区67890年佤邦, 
  

先将行分隔符改为“EOF",文件末尾的意思,然后利用gsub函数将换行符改为逗号,然后输出

  

c。印模块
在代码块中,只能有一个打印命令,并且,如果只出现了打印命令,那么将默认打印整行。
以下的两个例子中可以看的到,不论呼应的是什么内容,awk依然输出的是印刷的内容。包括第二个例子输出了与/etc/passwd同样行的你好内容

  
 <代码> [root@localhost ~] #回声终极战士| awk的{打印“hello world”}
  你好,世界
  (root@localhost ~) # awk/etc/passwd{打印“你好”}
  你好
  你好
  你好
  你好
  你好
  你好
  你好
  … 
  

d.BEGIN和结束模块

  

开始模块是在处理所有的文本信息之前执行的代码块,主要用于初始化FS变量及其他全局变量。
结束模块是在处理完文件中的所有行之后执行的代码块,主要用于执行最终计算和打印输出结尾流的摘要信息。

  

e。运算符
算数运算符,逻辑运算符,关系运算符

  
 <代码> [root@localhost ~] # awk的开始{=5,+=5;打印}”
  10
  [root@localhost ~] # awk开始{a=1, b=2,打印(a> 2,和b> 1, a> 1 | | b> 1)}”
  0 1
   
  
 <代码> [root@localhost ~] #回声| awk的开始{a=?00”testaaa} 100 ~//{打印“ok”} '
  好吧
  [root@localhost ~] # awk开始{=?00 testaaa”;如果(100 ~//){打印“ok”}}”
  好 
  

2。正则表达式
發inux系统运维三剑客"

  

。输出该文件里所有包含根的行

  
 <代码> [root@localhost jizuo] # awk/根/{打印$ 1}的/etc/passwd
  根:x: 0时:根:根://bin/bash
  接线员:x: 11:0:接线员:/根:/sbin/nologin
  dockerroot: x: 985:979:码头工人
   
  

输出以冒号作为分隔符的第五列中包含根的整行数据

  
 <代码> [root@localhost jizuo] # awk - f‘:’“5美元~/根/{打印$ 0}’/etc/passwd
  根:x: 0时:根:根://bin/bash
   
  

布尔表达式

  
 <代码> [root@localhost jizuo] # awk - f:“1美元==案?和5美元==案眥打印1”、“5美元}"/etc/passwd
  根,根
  

linux系统运维三剑客