• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

[linux]七、重定向和文本处理的命令grep详细用法、diff、生成补丁和打补丁、局域网扫描工具、小数的比较、输出和返回值、shell的多进程思想、查看nginx进程、NR和NF-3

武飞扬头像
FanMY_71
帮助1

目录

1、grep

1.1、grep -i和grep -v

1.2、grep -o

1.3、grep -r

1.4、"^"和"$"

1.5、grep -E或者egrep

1.5.1、^$

1.6、grep -A、grep -B和grep -C

1.7、grep小练习

2、diff

2.1、查看文件是否被人修改过(有备份文件的前提下)

2.2、diff命令的输出格式

2.2.1、diff -u

2.3、文件生成补丁和打补丁

2.3.1、生成补丁

2.3.2、打补丁

3、编写脚本

3.1、编程总结

3.1.1、小数的比较

3.1.2、输出值和返回值

3.2、shell里的多进程思想

3.2.1、并行和串行

3.2.2、父进程和子进程的问题

3.3、查看nginx进程是否存在

4、小数的运算

4.1、如何使用bc

4.2、小数的比较

5、awk

5.1、awk进行小数计算

5.2、NR和NF


1、grep

grep通过正则表达式分析程序
       grep, egrep, fgrep - print lines matching a pattern
pattern,模式。其实就是一些条件的组合,用来表达某个意思。主要是一些字符串 数字 特殊符号,组成一个公式。

^、$、|(或者)....,这些叫做元字符,有特殊作用的符号,用来描述其他的字符的字符

学新通

  1.  
    # [root@fttsaxf ~]# cat /etc/passwd|egrep "^c|^f"等价与下边那个命令
  2.  
    [root@fttsaxf ~]# cat /etc/passwd|grep -E "^c|^f"
  3.  
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
  4.  
    chrony:x:998:996::/var/lib/chrony:/sbin/nologin
  5.  
    fdd:x:1003:1003::/home/fdd:/bin/bash

1.1、grep -i和grep -v

-i,查找时,忽略大小写。

-v,反转差查找,输出与模式不相符的行

  1.  
    [root@fttsaxf rough_book]# cat phone.txt
  2.  
    xiaomi
  3.  
    XIAOMI
  4.  
    huawei
  5.  
    HUAWEI oppo vivo
  6.  
    VIVO
  7.  
    iphone
  8.  
    apple
  9.  
    meizu
  10.  
    kupai
  11.  
    nokia
  12.  
    [root@fttsaxf rough_book]# cat phone.txt | grep -i "xiaomi"
  13.  
    xiaomi
  14.  
    XIAOMI
  15.  
    [root@fttsaxf rough_book]# cat phone.txt | grep -i -n "xiaomi"
  16.  
    1:xiaomi
  17.  
    2:XIAOMI
学新通

1.2、grep -o

只显示匹配的内容

  1.  
    [root@fttsaxf rough_book]# cat phone.txt | grep -o xiaomi
  2.  
    xiaomi

1.3、grep -r

-r,查找某个目录下所有的文件,然后去匹配字符串

  1.  
    [root@fttsaxf rough_book]# grep -r "xiaomi" ./ # 递归的将当前目录下所有的文件都进行查找看是否有"xiaomi"字符串;"/"后边加不加"*",都可以
  2.  
    ./phone.txt:xiaomi

1.4、"^"和"$"

"^XX",查找以XX开头的字符串

"XX$",查找以XX结尾的字符串

"^XX$",查找为XX的字符串

  1.  
    [root@fttsaxf rough_book]# cat phone.txt|grep "^x"
  2.  
    xiaomi
  3.  
    [root@fttsaxf rough_book]# cat phone.txt|grep "e$"
  4.  
    iphone
  5.  
    apple
  6.  
    [root@fttsaxf rough_book]# cat phone.txt|grep "^iphone$"
  7.  
    iphone

1.5、grep -E或者egrep

-E,支持更加多的元字符,支持扩展正则表达式(regular expression)。正则表达式是由字符串 数字 特殊符号按照正确的规则组合而成的,要来表达某个意思的公式。例如:
^root -->表示以root开头。^元字符,有特殊作用的字符。

基本正则,里边有很多常见的元字符 ^、$ 、[]。

扩展正则:在基本正则的基础上新加了很多的元字符,例如: "|",表示或者。 、{}、?

grep不能识别扩展正则,所以需要用到egrep或者grep -E

  1.  
    [root@fttsaxf rough_book]# cat phone.txt |grep "^xiao|^a"
  2.  
    [root@fttsaxf rough_book]# cat phone.txt |egrep "^xiao|^a"
  3.  
    xiaomi
  4.  
    apple
  5.  
    [root@fttsaxf rough_book]# cat phone.txt |grep -E "^xiao|^a"
  6.  
    xiaomi
  7.  
    apple

1.5.1、^$

表示空行

  1.  
    [root@fttsaxf rough_book]# cat phone.txt
  2.  
    xiaomi
  3.  
    XIAOMI
  4.  
    huawei
  5.  
     
  6.  
    HUAWEI oppo vivo
  7.  
    VIVO
  8.  
    iphone
  9.  
    apple
  10.  
    meizu
  11.  
    kupai
  12.  
    #
  13.  
    nokia
  14.  
    [root@fttsaxf rough_book]# cat phone.txt |egrep -n "^#|^$" # 找出空行和注释行
  15.  
    4:
  16.  
    11:#
  17.  
    [root@fttsaxf rough_book]# cat phone.txt |egrep -v "^#|^$" # 找出文章中的有效行
  18.  
    xiaomi
  19.  
    XIAOMI
  20.  
    huawei
  21.  
    HUAWEI oppo vivo
  22.  
    VIVO
  23.  
    iphone
  24.  
    apple
  25.  
    meizu
  26.  
    kupai
  27.  
    nokia
学新通

1.6、grep -A、grep -B和grep -C

  1.  
    [root@fttsaxf rough_book]# cat phone.txt |grep -A 2 HUAWEI # 查找出HUAWEI,并且显示出后面2行
  2.  
    HUAWEI oppo vivo
  3.  
    VIVO
  4.  
    iphone
  5.  
    [root@fttsaxf rough_book]# cat phone.txt |egrep -B 2 iphone # 查找出iphone,并且显示出前边2行
  6.  
    HUAWEI oppo vivo
  7.  
    VIVO
  8.  
    iphone
  9.  
    [root@fttsaxf rough_book]# cat phone.txt |egrep -C 2 iphone # 查找出iphone,并显示出前后2行
  10.  
    HUAWEI oppo vivo
  11.  
    VIVO
  12.  
    iphone
  13.  
    apple
  14.  
    meizu

1.7、grep小练习

学新通

  1.  
    #第一题:
  2.  
    [root@fttsaxf rough_book]# cp /etc/passwd .
  3.  
    #第二题:
  4.  
    [root@fttsaxf rough_book]# cat passwd |egrep "^ftp|^mail"
  5.  
    #第三题:
  6.  
    [root@fttsaxf rough_book]# cat passwd |egrep -v "^m|^r|^f"
  7.  
    [root@fttsaxf rough_book]# cat passwd |egrep -v "^[rmf]"
  8.  
    [root@fttsaxf rough_book]# cat passwd |egrep "^[^rmf]"
  9.  
    """
  10.  
    [^rmf] 不是rmf字符
  11.  
    ^,在中括号里边表示取反;在外边表示以什么开头
  12.  
    """
  13.  
    #第四题:
  14.  
    [root@fttsaxf rough_book]# cat passwd | grep "bash$"
  15.  
    #第五题:
  16.  
    [root@fttsaxf rough_book]# cat /etc/login.defs |egrep -v "^#|^$"
  17.  
    #第六题:
  18.  
    [root@fttsaxf rough_book]# cat /var/log/messages|egrep -w "[a-Z]{16}"
  19.  
    [root@fttsaxf rough_book]# cat /var/log/messages|egrep "\<[a-Z]{16}\>"
  20.  
    [root@fttsaxf rough_book]# cat /var/log/messages|egrep "\<[a-Z]{16}\b"
  21.  
    Feb 13 23:08:44 fttsaxf NetworkManager[757]: <info> [1644764924.7576] settings: Loaded settings plugin: NMSKeyfilePlugin (internal)
  22.  
    '''
  23.  
    单词的界定符号
  24.  
    \< 以什么开头
  25.  
    \> 单词以什么结尾
  26.  
    \b 可以单独取代\<或者\>
  27.  
     
  28.  
    [root@fttsaxf rough_book]# cat phone.txt |egrep "\<iphone" # 查看单词以"iphone"开头的
  29.  
    iphone
  30.  
    iphone11
  31.  
    iphone13pro
  32.  
    [root@fttsaxf rough_book]# cat phone.txt |egrep "iphone\>" # 查看单词以"iphone"结尾的
  33.  
    iphone
  34.  
    maxiphone
  35.  
    [root@fttsaxf rough_book]# cat phone.txt |egrep "\<iphone\>" ## 查看单词"iphone"
  36.  
    iphone
  37.  
    '''
  38.  
    #第七题:
  39.  
    [root@fttsaxf rough_book]# cat passwd |grep "bash$"|grep "liu"
  40.  
    [root@fttsaxf rough_book]# cat passwd |egrep "liu.*bash"
  41.  
    '''
  42.  
    .*,是正则里表示任意字符的意思
  43.  
    '''
  44.  
    #第八题:
  45.  
    [root@fttsaxf rough_book]# cat /etc/ssh/ssh_config |egrep -v "^$|^#"
  46.  
    #第九题:
  47.  
    [root@fttsaxf rough_book]# cat /etc/ssh/ssh_config |egrep "[0-9][0-9]"
  48.  
    [root@fttsaxf rough_book]# cat /etc/ssh/ssh_config |egrep "[0-9]{2}"
  49.  
    '''
  50.  
    a{2},表示花括号前边的a连续出现两次
  51.  
    abc{2},表示花括号前边的c连续出现两次。能够匹配的字符串是"abcc"
  52.  
    [0-9]{2},表示从0到9里可以取2次的数字,随便取,取2次
  53.  
    [0-9]{2,5},表示从0到9里可以取2到5次的数字,随便取,最少取2次,最多取5次
  54.  
    [0-9]{2,},表示从0到9里可以取至少两次的数字
  55.  
     
  56.  
    '''
  57.  
    #第十题:
  58.  
    [root@fttsaxf rough_book]# cat /etc/ssh/ssh_config |egrep "[^0-Z]"
  59.  
    #第十一题:
  60.  
    [root@fttsaxf rough_book]# cat /etc/ssh/ssh_config |egrep -v "[0-9]"
  61.  
    #第十二题:
  62.  
    '''
  63.  
    IP地址是由四个0~255的数字和"."组成
  64.  
    "\.",表示"."符号
  65.  
    ".",在正则里表示任意单个字符
  66.  
    '''
  67.  
    [root@fttsaxf rough_book]# cat /var/log/secure|egrep "[0-9]{,3}\.[0-9]{1,3}"
  68.  
     
学新通

2、diff

用途:比较两个文件之间的差异,输出结果为两个文件的不同之处。

2.1、查看文件是否被人修改过(有备份文件的前提下)

  1.  
    [root@fttsaxf rough_book]# diff passwd passwd.backup
  2.  
    2,5d1
  3.  
    < root:x:0:0:root:/root:/bin/bash
  4.  
    < bin:x:1:1:bin:/bin:/sbin/nologin
  5.  
    < daemon:x:2:2:daemon:/sbin:/sbin/nologin
  6.  
    < adm:x:3:4:adm:/var/adm:/sbin/nologin
  7.  
    # 这里是在passwd中增加了几行。要是输出来之后没有输出,则表示没有修改
  8.  
    [root@fttsaxf rough_book]# diff phone.txt phone.txt.backup
  9.  
    13c13
  10.  
    < iphpne11
  11.  
    ---
  12.  
    > iphone11
  13.  
    # md5sum,根据文件里的内容计算出一个固定的值。如果文件修改了,里边的内容发生了变化,计算出来的值就会不一样
  14.  
    [root@fttsaxf rough_book]# md5sum phone.txt # 这里使用了"md5"
  15.  
    6f863f83adf0802cf683d20e03058153 phone.txt
  16.  
    [root@fttsaxf rough_book]# vim phone.txt
  17.  
    [root@fttsaxf rough_book]# md5sum phone.txt
  18.  
    583c051794779cc8aaa0e3b60cf898d3 phone.txt
学新通

2.2、diff命令的输出格式

学新通

2.2.1、diff -u

  1.  
    [root@fttsaxf rough_book]# diff -u phone.txt phone.txt.backup
  2.  
    --- phone.txt 2022-02-16 14:55:51.675261916 0800
  3.  
    phone.txt.backup 2022-02-16 14:47:50.202355604 0800
  4.  
    @@ -1,10 1,10 @@
  5.  
    xiaomi
  6.  
    XIAOMI
  7.  
    -huwei
  8.  
    huawei
  9.  
     
  10.  
    HUAWEI oppo vivo
  11.  
    VIVO
  12.  
    -ipnone
  13.  
    iphone
  14.  
    apple
  15.  
    meizu
  16.  
    [root@fttsaxf rough_book]# echo $?
  17.  
    1 # 有区别,返回值为"1"
  18.  
    [root@fttsaxf rough_book]# diff test test.backup
  19.  
    [root@fttsaxf rough_book]# echo $?
  20.  
    0 # 没有区别,返回值为"0"
  21.  
     
学新通

2.3、文件生成补丁和打补丁

补丁:程序更新了的部分。程序是人编写的,可能含有漏洞,发现漏洞之后,需要编写弥补这个漏洞的程序,也就是补丁

2.3.1、生成补丁

  1.  
    # 将phone和phone_v2的差异重定向到一个文件里,这个文件就是补丁包
  2.  
    [root@fttsaxf rough_book]# diff -u phone phone_v2 >phone.patch # 打补丁
  3.  
    [root@fttsaxf rough_book]# ls
  4.  
    phone phone.patch phone_v2
  5.  
    [root@fttsaxf rough_book]# cat phone.patch
  6.  
    --- phone 2022-02-16 15:11:21.534180101 0800
  7.  
    phone_v2 2022-02-16 15:17:11.332927027 0800
  8.  
    @@ -13,3 13,4 @@
  9.  
    iphone11
  10.  
    iphone13pro
  11.  
    maxiphone
  12.  
    new-phone:iphone19

2.3.2、打补丁

  1.  
    [root@fttsaxf rough_book]# patch phone <phone.patch # 将补丁加入phone中
  2.  
    patching file phone
  3.  
    [root@fttsaxf rough_book]# diff phone phone_v2 # 对比差异发现没有区别了

3、编写脚本

学新通

学新通

脚本的shell代码为:

  1.  
    #!/bin/bash
  2.  
     
  3.  
    # 编写菜单
  4.  
    menu(){
  5.  
    echo "================================"
  6.  
    echo "1.monitor memory usage"
  7.  
    echo "2.scan LAN"
  8.  
    echo "3.monitor /etc/passwd and /etc/hosts"
  9.  
    echo "4.monitor nginx deamon"
  10.  
    echo "5.exit"
  11.  
    echo "================================"
  12.  
    read -p "请输入你的选择:" option
  13.  
    }
  14.  
     
  15.  
    # 系统性能监控
  16.  
    usage(){
  17.  
    >1.txt || touch 1.txt
  18.  
    free -m |tail -n 2|awk '{print $1,$2,$3}' >1.txt # 将进程名、总共内存和已使用内容截取出来放入1.txt中
  19.  
    while read name total used
  20.  
    do
  21.  
    # 计算得到内存使用率情况,因为linux里边的默认的除是地板除
  22.  
    pro=$(printf "%.5f" `echo "scale=5;$used/$total"|bc`)
  23.  
    if (( $( echo "$pro > 0.7"|bc ) == 1 ))
  24.  
    then
  25.  
    echo "$name,这台机器的内存使用为$por,超过了70%,请注意"
  26.  
    else
  27.  
    echo "$name,这台机器的内存使用为$pro,没有超标"
  28.  
    fi
  29.  
    done < 1.txt
  30.  
    : <<EOF # 这里只是一个注释
  31.  
    -gt,表示大于
  32.  
    -lt,表示小于
  33.  
    -eq,表示等于
  34.  
    -ne,表示不等于
  35.  
    -ge,表示大于等于
  36.  
    -le,表示小于等于
  37.  
    (( 9 > 8 )) 等效于 [ 9 -gt 8 ],以此类推
  38.  
    EOF
  39.  
    }
  40.  
     
  41.  
    # 局域网扫描工具
  42.  
    scan(){
  43.  
    >ip.txt # ">",重定向,有就清空,没有就新建
  44.  
    echo "下面是正在使用的局域网:" >ip.txt
  45.  
    for ip in 192.168.29.{0..255}
  46.  
    do
  47.  
    (
  48.  
    if ping -c 1 $ip &>/dev/null ;then
  49.  
    echo $ip >>ip.txt
  50.  
    continue
  51.  
    fi
  52.  
    break
  53.  
    )&
  54.  
    done
  55.  
    echo "###################"
  56.  
    echo "全部局域网已经扫描完成"
  57.  
    echo "#################"
  58.  
    total=$(cat ip.txt|wc -l) # 统计ip.txt中有多少行
  59.  
    if (( $total > 1 ));then # 因为我之前输入了一个“下面是正在使用的局域网”,所以就是该文件行数大于1才会有ip地址正在使用
  60.  
    cat ip.txt
  61.  
    else
  62.  
    echo "局域网内没有IP地址在使用"
  63.  
    fi
  64.  
    }
  65.  
     
  66.  
    # 监控文件是否被修改
  67.  
    # tamper,做手脚;破坏的意思
  68.  
    tamper(){
  69.  
    while :
  70.  
    do
  71.  
    # 作比较之前要使用cp命令把diff后边第一个文件复制到你要比较的位置,切记不要使用mv!!!!
  72.  
    num_1=$(diff /etc/passwd /root/linux/script/menu/passwd.backup|wc -l )
  73.  
    if (( $num_1 == 0 )) # 统计行数为0的话,就是前一个文件没有被修改。因为后一个文件是前一个文件的备份
  74.  
    then
  75.  
    echo "/etc/passwd 文件没有被修改"
  76.  
    else
  77.  
    echo "/etc/passwd 文件被修改了"
  78.  
    fi
  79.  
    sleep 1
  80.  
    num_2=$(diff /etc/hosts /root/linux/script/menu/hosts.backup|wc -l)
  81.  
    if (( $num_2 == 0 ))
  82.  
    then
  83.  
    echo "/etc/hosts 文件没有被修改"
  84.  
    else
  85.  
    echo "/etc/hosts 文件被修改了"
  86.  
    fi
  87.  
    break
  88.  
    done
  89.  
    }
  90.  
     
  91.  
    # 监控nginx进程是否存在,存在或者不存在都给予提醒
  92.  
    process(){
  93.  
    if pidof nginx &>/dev/null;then
  94.  
    echo "nginx进程存在"
  95.  
    else
  96.  
    echo "nginx进程不存在"
  97.  
    fi
  98.  
    }
  99.  
     
  100.  
    while :
  101.  
    do
  102.  
    menu
  103.  
    case $option in
  104.  
    1)
  105.  
    echo "现在正在进行系统性能监控"
  106.  
    echo "################"
  107.  
    usage
  108.  
    ;;
  109.  
    2)
  110.  
    echo "现在正在进行局域网扫描"
  111.  
    scan
  112.  
    ;;
  113.  
    3)
  114.  
    echo "现在正在查看监控文件是否被修改"
  115.  
    echo "################"
  116.  
    tamper
  117.  
    ;;
  118.  
    4)
  119.  
    echo "现在正在查看监控nginx进程是否存在"
  120.  
    echo "######################"
  121.  
    process
  122.  
    ;;
  123.  
    5)
  124.  
    echo "成功退出"
  125.  
    exit
  126.  
    ;;
  127.  
    *)
  128.  
    echo "请您配合输入1-5的数字"
  129.  
    ;;
  130.  
    esac
  131.  
    echo
  132.  
    read -p "请敲击"Enter"键继续执行你想要的功能"
  133.  
    clear
  134.  
    done
学新通

3.1、编程总结

3.1.1、小数的比较

shell里默认双圆括号"(())"支持整数的运算和比较,但是不支持小数的。python都可以支持的。

  1.  
    [root@fttsaxf menu]# ((9>5))
  2.  
    [root@fttsaxf menu]# echo $?
  3.  
    0
  4.  
    [root@fttsaxf menu]# ((0.1>0.2))
  5.  
    -bash: ((: 0.1>0.2: 语法错误: 无效的算术运算符 (错误符号是 ".1>0.2")
  6.  
    [root@fttsaxf menu]# num=`echo "100.7 > 91.8"|bc` # 这里使用的反引号"`"
  7.  
    [root@fttsaxf menu]# num1=$(echo "100.7 > 91.8"|bc) # 这里使用了"$()",推荐使用这个
  8.  
    [root@fttsaxf menu]# echo $num $num1
  9.  
    1 1
  10.  
    # 以上两种写法都是一样的
  11.  
    # 另外awk也可以实现小数的计算

3.1.2、输出值和返回值

输出值:程序运行的过程中的输出内容 

返回值:命令是否执行成功。
函数的返回值:return(退出函数),后面不接数字默认情况下是0
脚本的返回值:exit(退出脚本),后面不接数字默认情况下是0

学新通

学新通

学新通

3.2、shell里的多进程思想

3.2.1、并行和串行

并行:同时执行--》速度快
串行:一个一个的执行,按照顺序 --》速度慢

for循环同时产生254个子进程去ping不同的ip地址;(命令) & 产生子bash进程去执行命令放在后台执行。{命令}&也可以

3.2.2、父进程和子进程的问题

当父进程结束的时候,会给所有的子进程发信号,告诉内核杀死所有的子进程。当父进程的程序执行完毕,但是子进程的程序没有执行完,若没有做修改,当父进程做完,子进程就会被全部杀死。

怎么防止这个问题呢?

可以使用wait命令 

学新通

 注意:wait是要放在for循环外边的

3.3、查看nginx进程是否存在

学新通

if  命令
then         
        命令1
else
        命令2
fi

当我们要使用返回值和if结合的时候,我们可以直接把命令放在if后边,当后边命令执行成功(也就是返回值为0)就会执行if第一个命令,要是没有成功就会执行第二个命令

4、小数的运算

bc

4.1、如何使用bc

bc有两种方法可以调用

  1.  
    [root@fttsaxf menu]# bc
  2.  
    bc 1.06.95
  3.  
    Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
  4.  
    This is free software with ABSOLUTELY NO WARRANTY.
  5.  
    For details type `warranty'.
  6.  
    9 6
  7.  
    15
  8.  
    quit
  9.  
    [root@fttsaxf menu]# echo "9 6.9"|bc
  10.  
    15.9
  11.  
     

4.2、小数的比较

-gt,表示大于
-lt,表示小于
-eq,表示等于
-ne,表示不等于
-ge,表示大于等于
-le,表示小于等于
(( 9 > 8 )) 等效于 [ 9 -gt 8 ],以此类推

5、awk

awk命令的完整语法
学新通

 awk的命令的执行过程:BEGIN和END部分只是执行一次,pattern{commands}中间部分每一行都执行一次

  1.  
    [root@fttsaxf menu]# awk -F ":" 'BEGIN{print "#########start###########" } $3>1000 {print $1,$3,$7 } END {print "#####################end###############"}' /etc/passwd
  2.  
    #########start###########
  3.  
    bagnyou 1001 /bin/bash
  4.  
    bangyou 1002 /bin/bash
  5.  
    fdd 1003 /bin/bash
  6.  
    chenxw 1004 /bin/bash
  7.  
    caohx 1005 /bin/bash
  8.  
    zhangjian 1006 /bin/bash
  9.  
    fzt 1007 /bin/bash
  10.  
    califeng 1008 /bin/bash
  11.  
    cali123 1009 /bin/bash
  12.  
    ysdf 1010 /bin/bash
  13.  
    fja 1011 /bin/bash
  14.  
    dfja 1012 /bin/bash
  15.  
    dfjalsk 1013 /bin/bash
  16.  
    #####################end###############
学新通

5.1、awk进行小数计算

  1.  
    [root@fttsaxf menu]# awk 'BEGIN{print 89 57}'
  2.  
    146
  3.  
    [root@fttsaxf menu]# awk 'BEGIN{print 89 57.5}'
  4.  
    146.5
  5.  
    [root@fttsaxf menu]# awk 'BEGIN{printf "%.2f\n",'$a'/'$b'}'
  6.  
    0.33
  7.  
    # %.2f\n,指定awk计算的精度,小数点的数位为2位

5.2、NR和NF

NR:是awk里表示每行里的行号(number of records),记录的行号,一行就是一条记录
NF:是awk里表示一行有多少个字段数(number of fields)
它们都是awk里的内部变量

  1.  
    [root@fttsaxf menu]# free -m
  2.  
    total used free shared buff/cache available
  3.  
    Mem: 1819 206 1470 9 142 1465
  4.  
    Swap: 2047 0 2047
  5.  
    [root@fttsaxf menu]# free -m |awk 'NR==2{print $3/$2}'
  6.  
    0.113249
  7.  
    [root@fttsaxf menu]# free -m |awk 'NR==2{print $3/$2*100}'
  8.  
    11.3249

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgffcka
系列文章
更多 icon
同类精品
更多 icon
继续加载