目录

1、Shell工具(二)

1.1 Awk

1.2 Sort

二、企业笔试真题

 


这里接上一篇博客:https://blog.csdn.net/weixin_43997530/article/details/111830755

1、Shell工具(二)

1.1 Awk

一个强大的文本分析工具,把文件逐行读入,以空格为默认分割符将每行切片,切开的部分再进行分析处理。

选项参数

功能

-F

指定输入文件折分隔符

-v

赋值一个用户定义变量

注:这里的参数也只是常用的,并非所有参数。

练习:

(1)搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。

[root@localhost test]# cp /etc/passwd ./      //这里将/etc/passwd文件作为原始数据进行处理
[root@localhost test]# awk -F: '/^root/ {print $7}' passwd  
/bin/bash

(2)搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以“,”号分割: 

[root@localhost test]# awk -F : '/^root/ {print $1,$7}' passwd
root /bin/bash
[root@localhost test]# awk -F : '/^root/ {print $1","$7}' passwd
root,/bin/bas
注:只有匹配了pattern的行才会执行action

 (3)只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell在最后一行添加"dahai,/bin/zuishuai"。

[root@localhost test]# awk -F : 'BEGIN{print "user,shell"} {print $1","$7} END{print "dahai,/bin/zuishuai"}' passwd
user,shell
root,/bin/bash
bin,/sbin/nologin
daemon,/sbin/nologin
adm,/sbin/nologin
lp,/sbin/nologin
 ......
geoclue,/sbin/nologin
redhat,/bin/bash
dahai,/bin/zuishuai
注:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。

 (4)将passwd文件中的用户id增加数值1并输出

[root@localhost test]# awk -v i=1 -F: '{print $3+i}' passwd
1
2
3
4
5
6
7

Awk内置变量

变量

说明

FILENAME

文件名

NR

已读的记录数(可以认为是行号)

NF

浏览记录的域的个数(切割后,列的个数)

 (1)统计passwd文件名,每行的行号,每行的列数

[root@localhost test]# awk -F: '{print "filename:"  FILENAME ", linenumber:" NR  ",columns:" NF}' passwd
filename:passwd, linenumber:1,columns:7
filename:passwd, linenumber:2,columns:7
filename:passwd, linenumber:3,columns:7

 (2)切割IP

[root@localhost test]# ifconfig ens160 | grep inet | awk -F" " '{print $2}'
192.168.67.133

(3)查询sed..txt 

[root@localhost ~]# awk '/^$/{print NR}' sed.txt
5

1.2 Sort

Sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。

sort(选项)(参数)                         //参数:指定待排序的文件列表

选项

说明

-n

依照数值的大小排序

-r

以相反的顺序来排序

-t

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

-k

指定需要排序的列

注:选项仅为部分常用参数,

练习:

[root@localhost test]# vim sort.sh               //数据准备
bb:40:5.4
bd:20:4.2
xz:50:2.3
cls:10:3.5
ss:30:1.6
[root@localhost test]# sort -t : -rk3 sort.sh    //按照“:”分割后的第三列倒序排序。
bb:40:5.4
bd:20:4.2
cls:10:3.5
xz:50:2.3
ss:30:1.6

二、企业笔试真题

1. 使用Linux命令查询file1中空行所在的行号:

[root@localhost ~]# awk '/^$/{print NR}' file1.txt
5

2. 有文件chengji.txt内容如下;使用Linux命令计算第二列的和并输出。

  • 张三 40
  • 李四 50
  • 王五 60
[root@localhost test]# cat chengji.txt | awk -F " " '{sum+=$2} END{print sum}'
150

3. Shell脚本里如何检查一个文件是否存在?如果不存在该如何处理?

#!/bin/bash
if [ -f file.txt ]; then
   echo "文件存在!"
else
   echo "文件不存在!"
fi

4. 用shell写一个脚本,对文本中无序的一列数字排序,并计算之和。

[root@CentOS6-2 ~]# cat test.txt
9
8
7
6
5
4
3
2
10
1
[root@CentOS6-2 ~]# sort -n test.txt|awk '{a+=$0;print $0}END{print "SUM="a}'
1
2
3
4
5
6
7
8
9
10
SUM=55

5. 请用shell脚本写出查找当前文件夹(/home)下所有的文本文件内容中包含有字符”shen”的文件名称。

[root@localhost test]# grep -r "shen" /home | cut -d ":" -f 1
/home/test/cut.txt

 

 posted on 2020-12-28 21:26  嚴∞帅  阅读(73)  评论(0编辑  收藏  举报