练习一: 输出一个文档中的第三行,第二列的数据。
使用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进行条件判断后,输出最大值。