• Linux学习 -- shell工具的复习(cut/sed/awk/sort)


    练习一: 输出一个文档中的第三行,第二列的数据。

    使用cut和sed结合。

    1.使用cut来查找列的数据

    2、使用sed来查找行的数据。

    命令如下:

            cut -d " " -f 2 file.txt | sed -n '3p'

             解析: cut命令的 -d 用来指定分隔符,-f 用来指定第几列

                         sed 命令的 -n 用来将结果打印出来, 其中 '3p'  指定第几行。

    cut  -- 用来显示行中的指定部分(第几列),删除文件中指定字段

    常用的形式:    cut -d “:” -f 2 file.txt        // 注意-f -c 只能用其中一个

    常用参数有:  

                    -d   :  指定分隔符

                    -f    :     显示第几列的的内容    // 如 -f 2 是第二列, 2-4 是第二到第四,

                                2-  指第2列以后所有的列,  -2 表示包括第2列之前的。

                   --complement      提取指定字段之外的列

                    -c   :   表示字符   如-c 2-   是包括第二个字符以后的所有字符。

    sed  -- 用来将数据进行选取、替换、删除、新増的命令(第几行)

    常用形式:    sed [选项] '[动作]' 文件名       // 注意单引号

    常用参数:

                    -n   :    只用于查看 sed 命令操作的数据,不改变源文件内容

                    -i    :    用 sed 的修改结果直接修改读取数据的文件,而不是由屏幕输出动作;

                    -e   :    允许对输入数据应用多条 sed 命令编辑

                    a    :    a动作会在指定行后追加数据,如果想要在指定行前插入数据,则需要使                                    用"i"动作。

                    d:     删除,删除指定的行;

                    p:     打印,输出指定的行;

    练习二:替换数据中第二行,第三列中的所有的字符a为c。

    思路:先获取第二行,第三列的数据,然后再对其中的字符进行替换

    命令:cut -d " " -f3 a.txt | sed -n '2p' | sed -e 's/a/c/g'

     练习三:将数据按照从小到大排序后,如果第三行第二列的值大于第三行第三列的值,则输出前者,否则输出后者。

    思路:先使用sort排序后,再使用awk,获取值的同时进行判断和输出。

    命令:sort -t " " -nk 3 b.txt | awk -F " " '{if (NR == 3) {print $2,$3}}' b.txt | awk -F " " '{if ($1 > $2) {print $1} if ($1 < $2) {print $2}}'

    awk   -- 一般用来进行条件判断

    常用形式: awk '条件1 {动作 1} 条件 2 {动作 2} …' 文件名

    常见参数:           

                    -F :   指定分隔符

                    -v:var=value在awk程序开始之前指定一个值valu给变量var,这些变量值用于awk程序的BEGIN快

                    -f:后面跟一个保存了awk程序的文件,代替在命令行指定awk程序

    条件有:   基本的算术运算

    sort     -- 将文件进行排序并输

    常用形式:   sort(选项)(参数)

     常见参数:

                    -n:依照数值的大小排序;

                    -r:以相反的顺序来排序;

                    -t        设置排序时所用的分隔字符

                    -k        指定需要排序的列

    练习四、编写shell脚本,完成要求。计算总价,然后按要求输出。

    name        price        num

    a        2        10

    b        3        12

    c        9        20

    注意:字符之间的分隔符是 一个制表符。

    输出结果为:

    name        price        num        allmoney

    a        2        10        20¥

    b        3        12        36¥

    c        9        20        180¥

    做题思路:先获取单价和数量的乘积的值存储起来,然后在按照要求在行尾插入对应的值。

    1. #!/bin/bash
    2. a=`awk -F"\t" '{if(NR == 2){print $2*$3}}' a.txt`
    3. b=`awk -F"\t" '{if(NR == 3){print $2*$3}}' a.txt`
    4. cat a.txt | sed '1s/$/\tallmoney/;2s/$/\t`$a`/;3s/$/\t$b/'

    其中使用awk来判断和计算乘积的值存储起来,然后再原本数据的情况下,每行插入数据即可。  注意:其中 反引号 用来保留当前结果的值,用于下次执行。

    练习五:在文本每行、行首。行尾加上字符

    使用sed来操作行,使用正则表达式来匹配行首和行尾。

    1. #!/bin/bash
    2. cat a.txt | sed "/./{s/^/xxx\t/;s/$/\tbbb/}"

    命令中  /./ 用来表示所有,^和$ 用来匹配行守和行尾。

    练习六:任意输入三个数,判断最大数。

    思路: 先使用read输入三个数字,并存储。然后使用if来判断

    1. #!/bin/bash
    2. read -p "one num: " a
    3. read -p "two num: " b
    4. read -p "last num: " c
    5. let max=$a
    6. if [ $b -ge $a ]
    7. then
    8. max=$b
    9. fi
    10. if [ $c -ge $max ]
    11. then
    12. max=$c
    13. fi
    14. echo "most big num : $max"

    使用read -p 来保存输入的值,然后使用if进行条件判断后,输出最大值。

  • 相关阅读:
    内容分发网络CDN分布式部署真的可以加速吗?原理是什么?
    【reverse】新160个CrackMe之116-REM-KeyGenME#10——脱壳、去背景音乐、识别反调试
    网站上线如何检查?
    postgresql简单sql
    MSDC 4.3 接口规范(30)
    什么是覆盖索引?
    【uniapp】小程序开发6:自定义状态栏
    Vue 父子组件传值有哪些方式
    VS Code 配置cmake(Linux环境)
    最好的婚姻:谈钱、说爱、聊性、话余生
  • 原文地址:https://blog.csdn.net/qq_50929489/article/details/127426582