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¥

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

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

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

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

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

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

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

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

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

#!/bin/bash
read -p "one num: " a
read -p "two num: " b
read -p "last num: " c

let max=$a
if [ $b -ge $a ]
then
	max=$b
fi
if [ $c -ge $max ]
then
	max=$c
fi
echo "most big num :  $max"

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

猜你喜欢

转载自blog.csdn.net/qq_50929489/article/details/127426582