Linux三剑客之awk


Linux三剑客之awk

磁盘管理

Linux系统中磁盘管理就是将硬盘通过挂载的方式挂载到Linux文件系统中。

1.挂载磁盘的步骤
  1.磁盘分区
  2.挂载

2.磁盘分区
  fdisk : 分区2TB以下的磁盘,最多可以分4个分区 (可分2TB以上的,但不稳定)
  gdisk : 分区2TB以上的磁盘,最多可以分128个分区

3.添加一块磁盘
  lsblk :查看本机的磁盘
  df -h :查看本机分区
  
  路径:cd /dev/ # ls

4.磁盘分区
  # fdisk /dev/sdb
  n : 新建一个分区
  p : 打印分区表
  w : 写入磁盘并退出
  q : 退出
  d : 删除一个分区

5.挂载磁盘分区
  1.格式化文件系统
  mkfs.xfs /dev/sdb1
  2.挂载
  mount /dev/sdb1 /mnt/ (mnt在这里是个目录
  df -h (挂载完,可查看)
mnt : 挂载第三方磁盘


6.总结
  1.关机
  2.添加硬盘
  3.创建分区
    fdisk /dev/sdb 或 gdisk /dev/sdb
  4.格式化文件系统
    mkfs.xfs /dev/sdb1 
  5.挂载
    mount /dev/sdb1 /mnt

 

awk

主要用来处理文本的(格式化文本)

1.awk 的语法
    awk [参数] [处理规则] [操作对象]

2.参数
    -F : 指定文本分隔符(默认是以空格作为分隔符)
        案例1:取文本以'f'作为分隔符的内容
            awk -F ‘f’ '{print $NF}' 2.txt

        案例2:打印所有用户的解析器(是以:号来分割)
            awk -F: '{print $NF}' /etc/passwd

3.awk的生命周期
  grep,sed和awk都是读一行处理一行,直至处理完成。
  
  1.接收一行作为输入
  2.把刚刚读入进入得到文本进行分解
  3.使用处理规则处理文本
  4.输入一行,赋值给$0,直至处理完成
  5.把处理完成之后的所有数据交给END{}来再次处理

4.awk中的预定义变量
  $0 : 代表当前行(下面的案例:在每行都加上了---)
    [root@localhost ~]# awk -F: '{print $0,"---"}' /etc/passwd

  $n : 代表第n列
    [root@localhost ~]# awk -F:'{print $1}' /etc/passwd

  NF : 记录当前行的字段数
    [root@localhost ~]# awk -F: '{print NF}' /etc/passwd
    [root@localhost ~]# awk -F: '{print $NF}' /etc/passwd (打印最后一列)
  
  NR : 用来记录行号
    [root@localhost ~]# awk -F: '{print NR}' /etc/passwd

  FS  :指定文本内容分隔符(默认是空格)(以冒号分隔开)
    [root@localhost ~]# awk 'BEGIN{FS=":"}{print $NF, $1}' /etc/passwd
    FS的优先级要高于 -F

  OFS : 指定打印分隔符(默认空格)(分割完,用 >>> 打印出来)
    [root@localhost ~]# awk -F: 'BEGIN{OFS=" >>> "}{print $NF, $1}' /etc/passwd

5.awk处理规则的执行流程
  BEGIN{}
  //
  {}
  END{}

6.awk中的函数
  print : 打印
  printf : 格式化打印
    %s : 字符串
    %d : 数字
    - : 左对齐
    + : 右对齐
    15 : 至少占用15个字符
  [root@localhost ~]# awk -F: 'BEGIN{OFS=" | "}{printf "|%+15s|%-15s|\n", $NF,$1}' /etc/passwd
结果:|      /bin/bash|root           |

7.awk中的定位
  1,正则表达式
    [root@localhost ~]# awk -F: '/root/{print $0}' /etc/passwd
    [root@localhost ~]# awk -F: '/^root/{print $0}' /etc/passwd

  2,比较表达式
    >
    <
    >=
    <=
    ~ 正则匹配
    !~        正则匹配(取反)
  
    案例:要求打印属组ID大于属主ID的行
      [root@localhost ~]# -F: '$4 > $3{print $0}' /etc/passwd
  
    案例2:结尾包含bash
      [root@localhost ~]# -F: '$NF ~ /bash/{print $0}' /etc/passwd

    案例3:结尾不包含bash
      [root@localhost ~]# -F: '$NF !~ /bash/{print $0}' /etc/passwd

  3.逻辑表达式
    && : 逻辑与
    || : 逻辑或
    ! : 逻辑非

  4.算数表达式
    +
    -
    *
    /
    %

    案例:要求打印偶数行
      [root@localhost ~]# awk -F: 'NR % 2 == 0{print $0}' /etc/passwd
    案例:要求打印奇数行
      [root@localhost ~]# awk -F: 'NR % 2 == 1{print $0}' /etc/passwd

  5.条件表达式
    ==
    >
    <
    >=
    <=
    
    案例:要求打印第三行
      [root@localhost ~]# awk -F: 'NR == 3{print $0}' /etc/passwd

  6、范围表达式
    [root@localhost ~]# awk -F: '/^root/,/^ftp/{print $0}' /etc/passwd

8.流程控制
  只存在循环之中
  if
    [root@localhost ~]# awk -F: '{if($3>$4){print "大于"}else{print "小于或等于"}}' /etc/passwd

    if(){}
    if(){}else{}
    if(){}else{} if(){}else{}

  for
    [root@localhost ~]# awk -F: '{for(i=10;i>0;i--){print $0}}' /etc/passwd
    for(i="初始值";条件判断;游标){}

  while
    [root@localhost ~]# awk -F: '{i=1; while(i<10){print $0, i++}}' /etc/passwd
    while(条件判断){}

  案例:每隔5行,打印一行横线
  [root@localhost ~]# awk -F: '{if(NR%5==0){print"-------------"}print $0}' /etc/passwd
  

  

相关