蔡狗_linux03 练习 管道相关命令

课后题

1、cut命令中各个参数表示什么意思?
(1)-b 仅显示行中指定直接范围的内容
(2)-c 仅显示行中指定范围的字符
(3)-d 指定字段的分隔符,默认的字段分隔符为“TAB”
(4)-f 显示指定字段的内容
(5)–complement 补足被选择的字节、字符或字段
(6)-n 与“-b”选项连用,不分割多字节字符
(7)–version 显示指令的版本信息
2、写出下列操作
有一个学生信息表student1.txt,包括字段Num,Name,Age,Score
01 tom 16 80
02 jack 18 89
03 jim 17 70
(1)选取第3字段内容 cut -f 3 student1.txt
(2)选取前两行的第1字段内容 head -2 student1.txt|cut -f 1
(3)选取第2,3字段的内容 cut -f 2,3 student1.txt
(4)选取除了第2字段的所有内容 cut -f2 --complement student1.txt

有一个学生信息表student2.txt,包括字段Num,Name,Age,Score
01,tom,16,80
02,jack,18,89
03,jim,17,70
(1)选取第2字段的内容 cut -f2 -d “,” student2.txt
(2)选取除去第2字段的内容 cut -f2 -d ”,” --complement student2.txt

有一个信息表test.txt
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
(1)选取第1到3个字符 cut -c1-3 test.txt
(2)选取前5个字符 cut -c-5 test.txt
(3)选取第6个字符开始到结尾的内容 cut-c6- test.txt
3、sort命令中各个参数表示什么意思?
(1) -b 忽略每行前面开始出的空格字符。
(2) -c 检查文件是否已经按照顺序排序。
(3) -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
(4) -f 排序时,将小写字母视为大写字母。
(5) -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
(6) -m 将几个排序好的文件进行合并。
(7) -M 将前面3个字母依照月份的缩写进行排序。
(8) -n 依照数值的大小排序。
(9) -o<输出文件> 将排序后的结果存入指定的文件。
(10) -r 以相反的顺序来排序。
4、对文件test.txt中的内容进行排序输出 sort test.txt
5、对文件test.txt中的内容进行排序并进行去重输出 sort -u test.txt
6、对文件test.txt中的内容数值大小进行升序输出 sort -n test.txt
7、对文件test.txt中的内容数值大小进行降序输出 sort -nr test.txt
8、对文件test.txt中的内容数值大小进行升序输出到文件test2.txt sort -nr test.txt -o test2.txt
9、按照文件date.txt中的日期月份进行升序输出 sort -n -k 2 -t ‘-’ date.txt
2019-11-22
2019-02-10
2019-10-15
2019-06-28
10、查看文件test.txt有多少个字节? wc -c test.txt
11、查看文件test.txt有多少个单词? wc -w test.txt
12、查看文件test.txt有多少行? wc -l test.txt
13、查看文件test.txt有多少字符数? wc -m test.txt
14、查看多个文件test1.txt ,test2.txt,test3.txt 各有多少行? wc -l test1.txt test2.txt test3.txt
15、统计home目录下多少个子文件 ls /home |wc -l
16、有一个成绩单score.txt 有姓名和成绩两个字段name score
xiaoming 90
xiaopeng 80
xiaoming 90
xiaodong 92
xiaoming 90
xiaoli 85
xiaoli 85
xiaobai 82
对score.txt文件按照成绩进行降序并去重操作,并且把重复的个数显示出来
cat score.txt|sort -n -k 2|uniq -c
17、将16题的结果通过tee保存到tee.txt文件 cat score.txt|sort -n -k 2|uniq -c|tee tee.txt
18、tr命令各个参数表示什么意思
(1)用法为tr [参数] SET1…
(2)-c 补足SET1
(3)-d 删除匹配SET1的内容,并不作替换
(4)-s 如果匹配于SET1 的字符在输入序列中存在连续的重复,在替换时会被统一缩为一个字符的长度
19、使用tr命令删除文件test.txt中的空行 cat test.txt | tr -s ‘\n’
20、使用tr命令删除文件test.txt中所有的数字 cat test.txt|tr -d ‘[0-9]’
21、使用tr命令把文件test.txt中的字符串去重操作 cat test.txt|tr -s ‘[a-zA-Z]’
22、使用tr命令把文件test.txt中的除了数字之外的内容都替换成”=”号 cat test.txt|tr -c ‘[0-9]’ ‘=’
23、使用tr命令把文件test.txt中的小写字母全部替换成大写字母 cat test.txt |tr ‘[a-z]’ ‘[A-Z]’
24、split命令中各个参数表示什么意思?
(1)-b 值为每一输出的大小,单位为byte
(2)-d 使用数字作为后缀
(3)-l 值为每一输出档的行数大小
25、对大文件test.txt按照每个小文件1M进行切分 split -b 1024k test.txt
26、对大文件test.txt按照每100行问一个小文件进行切分 split -l 100 test.txt
27、大文件test.txt按照每个小文件1M进行切分,并指定以3个数字为结尾的文件名 split -b 1024k test.txt -d -a 3
28、大文件test.txt按照每个小文件1M进行切分, 并且指定以test_file为小文件名的开始,结尾跟3位的数字 split -b -1024k test.txt -d -a 3 test_file
29、awk的三种基本格式
awk ‘pattern’ filename
awk ‘{action}’ filename
awk ‘pattern {action}’ filename
30、使用awk命令模糊查找文件test.txt中的字符串chuanzhi awk ‘/chuanzhi/’ test.txt
31、使用awk命令对文件test.txt 文件按照’;‘进行切割,并把第1,2,3的字段的打印出来
awk -F ‘;’ ‘{print $1,$2,$3}’ test.txt
32、文件test.txt 有三列分别为 姓名 学科 成绩用”;”进行分割的,请按照成绩进行排序,并把第三列成绩打印出 awk -F ‘;’ ‘{print $3}’ test.txt |sort
33、文件test.txt 有三列分别为 姓名 学科 成绩用”;”进行分割的,请使用awk命令把及格的同学的信息打印出来并显示及格 awk -F ‘;’ ‘{if($3>60) print $1,$2,$3,”及格”}’ test.txt
34、awk的内置字符串函数有哪些?
(1)gsub(r,s):在输入文件中用s替换r
(2)gsub(r,s,t):在t中用s替换r
(3)index(s,t):返回s中字符串第一个t的位置
(4)length(s):返回s的长度
(5)match(s,t):测试s是否包含匹配t的字符串
(6)split(s,t):在t上将r分成序列s
(7)sub(r,s,t):将t中第一次出现的r替换成s
(8)substr(r,s):返回字符串r中从s开始的后缀部分
35、使用awk命令求出test.txt文件中的行数 awk ‘{count++;print $0;} END{print "当前文件的行数为: ",count}’ test.txt
36、使用awk命令只查看文件test.txt中的第50-60行的内容 awk ‘{if(NR>=50&& NR<=60) print $0}’ test.txt
37、awk常用的内置变量有哪些?
(1)FS:输入字段分隔符, 默认为空白字符
(2)OFS:输出字段分隔符, 默认为空白字符
(3)RS:输入记录分隔符(输入换行符), 指定输入时的换行符
(4)ORS:输出记录分隔符(输出换行符),输出时用指定符号代替换行符
(5)NF:number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量
(6)NR:行号,当前处理的文本行的行号。
(7)FNR:各文件分别计数的行号
(8)FILENAME:当前文件名
(9)ARGC:命令行参数的个数
(10)ARGV:数组,保存的是命令行所给定的各参数
38、求文件test.txt中字符a出现的次数 awk ‘{a=gsub(/a/,“0”);sum = sum + a ; print KaTeX parse error: Expected 'EOF', got '}' at position 4: 0,a}̲END{print "一共替换… 表示最后一行
40、用sed命令打印出test.txt文件的第10-20行内容 sed -n -e ‘10,20p’
41、用sed命令打印出test.txt文件的全部内容并显示行号 sed -n -e ‘1, = ′ − e ′ 1 , =' -e '1, =e1,p’ test.txt
42、使用sed命令查询test.txt文件中含有test的内容 nl test.txt |sed -n -e ‘/test/Ip’
43、使用sed命令删除test.txt文件的第1行 sed -i ‘1d’ test.txt
44、使用sed命令删除test.txt 文件的末行 sed -i ‘KaTeX parse error: Expected group after '^' at position 51: …件的空行 sed -i '/^̲/d’ test.txt
46、使用sed命令删除test.txt 文件的含有testi的内容行 sed -i /test/{d}’ test.txt
47、使用sed命令在test.txt每一行的行首增加test sed -i ‘s/^/test/’ test.txt
48、使用sed命令在test.txt每一行的行尾增加test sed -i ‘s/ / t e s t / ′ t e s t . t x t 49 、 使 用 s e d 命 令 在 t e s t . t x t 中 第 6 行 的 行 尾 追 加 一 行 内 容 为 t e s t s e d − i ′ N ; 6 a t e s t ′ t e s t . t x t 50 、 使 用 s e d 命 令 在 t e s t . t x t 中 第 3 行 的 行 首 追 加 一 行 内 容 为 t e s t s e d − i ′ N ; 3 i t e s t ′ t e s t . t x t 51 、 用 s e d 命 令 把 t e s t . t x t 中 o l d t e s t 替 换 为 n e w t e s t 打 印 s e d − e ′ s / o l d t e s t / n e w t e s t / ′ t e s t . t x t 52 、 使 用 s e d 命 令 把 t e s t . t x t 中 o l d t e s t 替 换 成 n e w t e s t 修 改 源 文 件 s e d − i − e ′ s / o l d t e s t / n e w t e s t / ′ t e s t . t x t 53 、 使 用 s e d 命 令 查 询 i p 地 址 i f c o n f i g ∣ g r e p " i n e t a d d r " ∣ a w k ′ N R = = 1 p r i n t ′ ∣ s e d − e ′ s / . ∗ i n e t a d d r : / / ′ ∣ s e d − e ′ s / B c a s t : . ∗ /test/' test.txt 49、使用sed命令在test.txt中第6行的行尾追加一行内容为test sed -i 'N;6atest' test.txt 50、使用sed命令在test.txt中第3行的行首追加一行内容为test sed -i 'N;3itest' test.txt 51、用sed命令把test.txt中oldtest替换为newtest打印 sed -e 's/oldtest/newtest/' test.txt 52、使用sed命令把test.txt中oldtest替换成newtest修改源文件 sed -i -e 's/oldtest/newtest/' test.txt 53、使用sed命令查询ip地址 ifconfig |grep "inet addr"|awk 'NR==1{print}'|sed -e 's/^.*inet addr://'|sed -e 's/Bcast:.* /test/test.txt49使sedtest.txt6testsediN;6atesttest.txt50使sedtest.txt3testsediN;3itesttest.txt51sedtest.txtoldtestnewtestsedes/oldtest/newtest/test.txt52使sedtest.txtoldtestnewtestsedies/oldtest/newtest/test.txt53使sedipifconfiggrep"inetaddr"awkNR==1printsedes/.inetaddr://sedes/Bcast:.//’
或者ifconfig eth0|grep “inet addr”|sed -e ‘s/^.inet addr://’|sed -e 's/Bcast:.$//’
Shell
1、使用shell编写脚本helloworld.sh打印输出 Hello World!
#!/bin/bash
echo “Hello World!”
2、Shell变量的命名规则?
变量名必须是以字母或下划线字符“_”开头,后面跟字母、数字或下划线字符。不要使用?、*或其他特殊字符命名你的变量
3、Shell脚本怎么检查/home/test目录下是否存在test.txt文件
if [ -f test.txt ]; then
echo “文件存在!”
else
echo “文件不存在!”
fi
4、Shell特殊字符用来处理参数代表什么意思?
(1) 0 当 前 脚 本 的 文 件 名 ( 2 ) 0 当前脚本的文件名 (2) 0(2)n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是 2 。 ( 3 ) 2。 (3) 2(3)# 传递给脚本或函数的参数个数。
(4) ∗ 传 递 给 脚 本 或 函 数 的 所 有 参 数 。 ( 5 ) * 传递给脚本或函数的所有参数。 (5) (5)@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 ∗ 稍 有 不 同 , 下 面 将 会 讲 到 。 ( 6 ) * 稍有不同,下面将会讲到。 (6) (6)? 上个命令的退出状态,或函数的返回值。一般情况下,大部分命令执行成功会返回 0,失败返回 1。
(7)$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
5、有一句英文 I am an excellent Chinese student, and I like Chinese culture very much ,请用for循环把每个单词中字母数大于5的单词打印出来。
#!/bin/bash
a=’ I am an excellent Chinese student, and I like Chinese culture very much.’
for i in $a
do
NUM=echo $i |wc -L
if [ $NUM -ge 5 ];then
echo $i
fi
done
6、统计/home/test文件夹下有多少文件,并把文件名显示出来
#!/bin/bash
#使用ls 递归显示所有,再判断是否为文件,如果是文件则计数器加 1
cd /home/test
sum=0
for i in ls -r
do
if [ -f i ] ; t h e n l e t s u m + + e c h o " 文 件 名 : i ];then let sum++ echo "文件名: i];thenletsum++echo":i"
fi
done
echo “总文件数量为:$sum”
7、编写脚本add.sh,求两个数之和,脚本之后跟两个参数求这两个参数之和,并判断输入的参数个数是不是两个和输入的参数是不是数字进行判断.
当输入的参数不是2个参数的时候

当输入的第一个参数不是数字的时候

当输入的第二个参数不是数字的时候

正确输入输出

#!/bin/sh
if [ $# -ne 2 ]; then
echo “请输入两个数字参数”
else
if $1 | grep -q ‘[^0-9]’
then
echo “第一个参数不是数字,请输入数字”
exit 1
fi
if 2 ∣ g r e p − q ′ [ 0 − 9 ] ′ t h e n e c h o " 第 二 个 参 数 不 是 数 字 , 请 输 入 数 字 " e x i t 1 f i s u m = 2 | grep -q '[^0-9]' then echo "第二个参数不是数字,请输入数字" exit 1 fi sum= 2grepq[09]thenecho","exit1fisum=(($1+$2))
echo $sum
fi

你可能感兴趣的:(linux)