本节所讲内容:
RHEL7网络管理-shell-sed-awk
- 网络相关的调试命令
- shell脚本
- sed和awk命令
Linux下端口号的分配
TCP 和UDP采用16位的端口号来识别应用程序 # 2的16次方=65536,最大是65535.
TCP/IP的临时分配1024-5000之间的端口号
大于5000以上的是为其他服务保留的
千年虫 19xx 1999 1900 2000
TCP端口分配
21 ftp 文件传输服务
22 ssh 安全远程连接服务
23 telnet 远程连接服务
25 smtp 电子邮件服务
53 DNS 域名解析服务
80 http web服务
443 https 安全web服务
UDP端口分配
69 tftp 简单文件传输协议
123 ntp 时间同步服务(云主机,手机通过网络同步时间)
161 snmp 简单网络管理
如果你不知道服务对应的端口号:
编辑 /etc/services 文件 包含所有的端口号
例如:查看ftp的端口号
有的服务是UDP和TCP 端口都会监听的
[root@localhost ~]# grep ftp /etc/services
ftp-data 20/tcp
ftp-data 20/udp
# 21 is registered to ftp, but also used by fsp
ftp 21/tcp
ftp 21/udp fsp fspd
tftp 69/tcp
tftp 69/udp
sftp 115/tcp
sftp 115/udp
tftp-mcast 1758/tcp
tftp-mcast 1758/udp
mtftp 1759/udp spss-lm
venus-se 2431/udp # udp sftp side effect
codasrv-se 2433/udp # udp sftp side effectQ
ftp-data 20/sctp # FTP
ftp 21/sctp # FTP
ni-ftp 47/tcp # NI FTP
ni-ftp 47/udp # NI FTP
bftp 152/tcp # Background File Transfer Program
bftp 152/udp # Background File Transfer Program
softpc 215/tcp # Insignia Solutions
softpc 215/udp # Insignia Solutions
subntbcst_tftp 247/tcp # SUBNTBCST_TFTP
subntbcst_tftp 247/udp # SUBNTBCST_TFTP
mftp 349/tcp # mftp
mftp 349/udp # mftp
ftp-agent 574/tcp # FTP Software Agent System
ftp-agent 574/udp # FTP Software Agent System
pftp 662/tcp # PFTP
pftp 662/udp # PFTP
ftps-data 989/tcp # ftp protocol, data, over TLS/SSL
ftps-data 989/udp # ftp protocol, data, over TLS/SSL
ftps 990/tcp # ftp protocol, control, over TLS/SSL
ftps 990/udp # ftp protocol, control, over TLS/SSL
etftp 1818/tcp # Enhanced Trivial File Transfer Protocol
etftp 1818/udp # Enhanced Trivial File Transfer Protocol
utsftp 2529/tcp # UTS FTP
utsftp 2529/udp # UTS FTP
gsiftp 2811/tcp # GSI FTP
gsiftp 2811/udp # GSI FTP
odette-ftp 3305/tcp # ODETTE-FTP
odette-ftp 3305/udp # ODETTE-FTP
tftps 3713/tcp # TFTP over TLS
tftps 3713/udp # TFTP over TLS
exasoftport1 3920/tcp # Exasoft IP Port
exasoftport1 3920/udp # Exasoft IP Port
odette-ftps 6619/tcp # ODETTE-FTP over TLS/SSL
odette-ftps 6619/udp # ODETTE-FTP over TLS/SSL
kftp-data 6620/tcp # Kerberos V5 FTP Data
kftp-data 6620/udp # Kerberos V5 FTP Data
kftp 6621/tcp # Kerberos V5 FTP Control
kftp 6621/udp # Kerberos V5 FTP Control
mcftp 6622/tcp # Multicast FTP
mcftp 6622/udp # Multicast FTP
查看端口的监听状态
netstat
常用格式
tcp端口 anpt udp端口:anpu 全部:anput
-a,--all
-n,--numeric don't resolve names
-p,--programs
-t,显示tcp连接
-u,显示udp 连接
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# netstat -anpt | grep httpd
tcp6 0 0 :::80 :::* LISTEN 2128/httpd
配置网络和IP地址
方法一: [root@localhost ~]# nmtui-edit eth0 方法二:修改网上配置文件
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="dhcp" # 启动的协议none static 静态 dhcp动态IP
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth0"
UUID="0c7f54d0-34d5-4d05-9d40-620de7f0d4d1" #唯一的标识
DEVICE="eth0" #设备名称
ONBOOT="yes" #是否激活网卡 yes激活 no 不激活
IPADDR=“192.168.199.60”#配置的IP地址
PREFIX="24" #掩码长度
GATEWAY="192.168.199.1" #配置网关
注: 在RHEL7中增强了NetworkManager服务功能,弱化了netwrok的功能
RHEL7中要确定NetwrokManger服务是开启的状态
[root@localhost ~]# systemctl status NetworkManager
● NetworkManager.service - Network Manager
Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
Active: active (running) since 日 2017-02-05 09:11:20 CST; 1h 2min ago
Docs: man:NetworkManager(8)
Main PID: 480 (NetworkManager)
CGroup: /system.slice/NetworkManager.service
├─480 /usr/sbin/NetworkManager --no-daemon
└─583 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-eth0.pid -lf /var/lib/Netwo...
2月 05 09:11:22 localhost.localdomain NetworkManager[480]: [1486257082.0589] device (eth0): state change: ...0 0]
2月 05 09:11:22 localhost.localdomain NetworkManager[480]: [1486257082.0712] device (eth0): state change: ...0 0]
2月 05 09:11:22 localhost.localdomain dhclient[583]: bound to 192.168.199.116 -- renewal in 18700 seconds.
2月 05 09:11:22 localhost.localdomain NetworkManager[480]: [1486257082.0759] device (eth0): state change: ...0 0]
2月 05 09:11:22 localhost.localdomain NetworkManager[480]: [1486257082.0772] manager: NetworkManager state...OCAL
2月 05 09:11:22 localhost.localdomain NetworkManager[480]: [1486257082.1183] manager: NetworkManager state...OBAL
2月 05 09:11:22 localhost.localdomain NetworkManager[480]: [1486257082.1185] policy: set 'eth0' (eth0) as ... DNS
2月 05 09:11:22 localhost.localdomain NetworkManager[480]: [1486257082.1737] device (eth0): Activation: su...ted.
2月 05 09:11:25 localhost.localdomain NetworkManager[480]: [1486257085.9561] manager: startup complete
2月 05 09:57:35 localhost.localdomain NetworkManager[480]: [1486259855.0311] audit: op="connection-update"...ess"
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# systemctl restart NetworkManager #重启服务
[root@localhost ~]# systemctl enable NetworkManager # 设置服务开机自动启动
#此服务不开启,则无法通过nmtui工具配置网络
或
重启网络服务
[root@localhost ~]# systemctl restart network
修改主机名配置文件
[root@localhost ~]# vi /etc/hostname
注:修改完配置文件后,想永久生效,需要重启机器
如果是RHEL 6 操作系统,通过下面的文件修改主机名
vim /etc/sysconfig/network
方法2:临时配置主机名
[root@localhost ~]# hostname jingpan.net
[root@localhost ~]# hostname
jingpan.net
配置host文件
[root@localhost ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
ip-->主机名的对应
查看路由信息:查看默认网关
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.199.1 0.0.0.0 UG 100 0 0 eth0
192.168.199.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
ping命令的一般格式为:
-c 数目 在发送指定数目的包后停止
-i 秒数 设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次
[root@localhost ~]# ping -c 10 www.baidu.com
PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=55 time=12.1 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=55 time=12.1 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=3 ttl=55 time=12.3 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=4 ttl=55 time=9.87 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=5 ttl=55 time=11.8 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=6 ttl=55 time=11.7 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=7 ttl=55 time=13.0 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=8 ttl=55 time=13.9 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=9 ttl=55 time=12.1 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=10 ttl=55 time=11.8 ms
--- www.a.shifen.com ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9013ms
rtt min/avg/max/mdev = 9.874/12.120/13.968/0.993 ms
[root@localhost ~]# ping -c 10 -i 2 www.baidu.com
PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=55 time=11.2 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=55 time=12.4 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=3 ttl=55 time=11.7 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=5 ttl=55 time=11.5 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=6 ttl=55 time=9.95 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=7 ttl=55 time=12.2 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=8 ttl=55 time=11.8 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=9 ttl=55 time=12.6 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=10 ttl=55 time=10.4 ms
--- www.a.shifen.com ping statistics ---
10 packets transmitted, 9 received, 10% packet loss, time 18021ms
rtt min/avg/max/mdev = 9.952/11.580/12.635/0.866 ms
_________________________________________________________________________________
随着企业的应用越来越多,服务器的自动化管理也是越来越重要,在linux中提供了一个非常强大的功能,这种
功能名字为shell脚本。
shell脚本概述:
我们所输入的命令计算机是不识别的,这时就需要一种程序帮助我们进行翻译,变成计算机所识别的二进制程序,同时又将计算机的执行的结果翻译给我们,这个就是shell(壳)
linux 的shell脚本是一种特殊的应用程序,常见的shell解释器有很多种使用不同的shell时期内部指令,命令提示方式方面会存在一些区 别,可以通过/etc/shells文件查看。
[root@jingpan ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
挂载 /dev/cdrom设备
[root@jingpan mnt]# mount -t auto /dev/cdrom /mnt
[root@jingpan mnt]# rpm -ivh /mnt/Packages/tcsh-6.18.01-13.el7.x86_64.rpm
[root@jingpan mnt]# rpm -ivh /mnt/Packages/zsh-5.0.2-25.el7.x86_64.rpm
[root@jingpan mnt]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
/bin/zsh
[root@jingpan mnt]# zsh
[root@jingpan]/mnt# cd ~
[root@jingpan]~# cd /etc/sysconfig
[root@jingpan]/etc/sysconfig#
/bin/bash是大多数linux 中默认的shell解释器。之后的所有脚本的编写都是bash 脚本。
编写第一个Shell脚本:first.sh
linux 不以后缀名区分文件,为了方便记忆,这里就以.sh为结尾
#!/bin/bash
#this is my first shell script
mkdir /root/shell
ifconfig
编写shell脚本的过程
[root@jingpan ~]# vi first.sh
[root@jingpan ~]# chmod +x firxt.sh
[root@jingpan ~]# ./first.sh
注释:
#!/bin/bash 主要为了声明,我以下所写的均为bash语言(我用的是bash解释器)
第二行为注释行,注释信息不生效,#后面表示注释
当写一个比较大的脚本时,如果没有一个好的注释,那么也就没有人都能看懂其中的意思了。
再往后即执行的命令
执行脚本的不同方式
1、使用绝对路径执行
2、使用相对路径执行,如./的方式
3、使用sh 命令来执行 格式 sh /路径/脚本文件名.sh 不需要执行权限
4、使用bash 命令来执行 格式 bash /路径/脚本文件名.sh 不需要执行权限
shell变量
变量的定义是:可以存放一个可变的值的空间
常见的shell变量有自定义变量、环境变量、预定义变量
一般使用echo 输出变量,变量名的格式=$变量名
1、自定义变量
自定义变量是用户根据自己的环境自己定义的变量
Bash 中比较简单的变量,不用进行提前声明,而是直接指定变量名称并赋给初始值,
定义变量的基本格式为变量名=变量值等号两边不允许出现空格
变量名称只能以字母和下划线开头 名称中不能包含+。*、-、/、?、%......等一些特殊字符。
举例:
来进行定义一个变量名字为Linux值为7.2(注意大小写)
[root@jingpan ~]# Linux=7.2
[root@jingpan ~]# echo $Linux
7.2
[root@jingpan ~]# linux=6.5
[root@jingpan ~]# echo $linux
6.5
[root@jingpan ~]# echo $Linux
7.2
可以直接在命令行定义,以上就是定义一个变量并赋予值,通过echo进行输出变量 $ 是引用变量的特殊字符(必须使用$符号)
echo 和调用的变量之间必须要有空格
举例2
当需要一起调用两组变量时
[root@jingpan ~]# Linux=7.5
[root@jingpan ~]# linux=6.5
[root@jingpan ~]# echo $Linux $linux
7.5 6.5
直接使用echo 后面跟$调用的变量,如果有多个则空格隔开
举例3:
当变量名和后面的字符容易混淆的时候应该使用 {}将变量名括起来
[root@jingpan ~]# echo $Linuxsystem
[root@jingpan ~]# echo {$Linux}system
{7.5}system
[root@jingpan ~]# echo ${Linux}system
7.5system
read命令
除了上面的赋值之外还可以使用read命令进行赋值,read命令用来提示用户输入信息,从而实现简单的交互式过程(其实我们所输入的命令就是一种交互的过程)
执行时需要从标准输入设备键盘读取一行,并以空格为分隔符
比如我同时定义两个变量操作如下所示
[root@jingpan ~]# read dell hp
1 2
[root@jingpan ~]# echo $dell
1
[root@jingpan ~]# echo $dell $hp
1 2
[root@jingpan ~]#
为了交互更加的形象,提高易用性,加上 -p选项来设置提示信息
[root@jingpan ~]# read -p "input your passwd:" passwd
input your passwd:123456
[root@jingpan ~]# echo $passwd
123456
[root@jingpan ~]#
数值变量的运算
shell 脚本的数值运算多用于脚本程序的过程控制(如循环次数,使用量比较等)
在shell环境中,只能进行比较简单的整数运算
运算符与变量之间必须有一个空格,整数的运算主要是通过内部命令expr命令进行运算
格式 变量1 运算符 变量2
其中 变量1、变量2、......对应的需要计算的数值变量(需要$符号调用)常用的几种运行符如下所示
加法运算:+
减法运算:-
乘法运算:\*
除法运算:/
求模(取余)运算:%
[root@jingpan ~]# A=10
[root@jingpan ~]# B=20
[root@jingpan ~]# expr $A +$B
expr: 语法错误
[root@jingpan ~]# expr $A +$B
expr: 语法错误
[root@jingpan ~]# expr $A + $B
30
[root@jingpan ~]# expr $A+$B
10+20
[root@jingpan ~]# expr $A + $B
30
[root@jingpan ~]# clear
[root@jingpan ~]# expr $A + $B
30
[root@jingpan ~]# expr $A+$B
10+20
[root@jingpan ~]# expr $A * $B
expr: 语法错误
[root@jingpan ~]# expr $a \* $B
200
[root@jingpan ~]# expr $a / $B
0
[root@jingpan ~]# expr $a % $B
10
[root@jingpan ~]# abc=$(expr $A + $B)
[root@jingpan ~]# echo $abc
30
特殊 shell变量
1、环境变量
环境变量是指系统本身运行需要由linux 系统提前建好的一类变量
主要用于用户的工作环境,包括(用户的宿主目录,命令的查找路径,用户的当前目录,登录的终端等)环境变量的值由操作系统本身自己维护,附着用户的状态改变而改变
使用evn调取当前环境变量
[root@jingpan ~]# env
XDG_SESSION_ID=47
HOSTNAME=jingpan.net
TERM=linux
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.199.231 51450 22
SSH_TTY=/dev/pts/0
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=zh_CN.UTF-8
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=192.168.199.231 51450 192.168.199.116 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env
环境变量配置文件在/etc/profile(全局)
用户宿主目录/home/zhangsan/.bash_profile(局部)
$PWD
pwd 命令就是调用了这个变量才能进行输出
[root@jingpan ~]# echo $PWD
/root
[root@jingpan ~]# cd /etc/
[root@jingpan etc]# echo $PWD
/etc
$PATH
定义命令的默认搜索路径,我们讲的mysql可执行程序优化的时候我们是直接将程序路径写到了这个变量中才可以再往任何目录下进行输入
注:只有自己执行的命令在PATH变量包括的目录下,才可以直接使用并使用tab补齐。如果不在$PATH所包括的路径下,只能写相关路径或绝对路径。
例:将我们所写的脚本放到$PATH的默认搜索路径中去
1、 将/home/jingpan/shell目录写入到PATH的环境变量中,但是还没有永久生效
[jingpan@jingpan shell]$ PATH="$PATH:/home/jingpan/shell"
[jingpan@jingpan /]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/home/jingpan/shell
2 、永久生效
vim /etc/profile #所有用户生效
vim /home/.bash_profile #指定用户生效
需要重启系统
在最后追加PATH="PATH:/root"
立即生效
soruce /etc/profile #重新加载
测试:
/home/jingpan/shell下的可执行程序可以在任何目录下直接执行。
每个用户还有自己的环境变量都在自己的程序的宿主目录中
2、位置变量
为了使用shell脚本程序:是为方便通过命令行为程序提供参数 Bash引用了位置的概念
当执行命令操作的第一个字段表示命令字或程序名,其余的字符串参数按照从左到右的顺序依次给位置变量赋值
位置变量也称为位置参数,使用$1 $2 $3 ...$9表示、
[jingpan@jingpan shell]$ vi add.sh
#!/bin/bash
SUM=$(expr $1 + $2 )
echo "$1 + $2"= $SUM
[jingpan@jingpan shell]$ sh add.sh 10 20
10 + 20= 30
3、预定义变量
$#:命令行中位置变量的个数(程序执行了几个位置参数)
$*:所有位置变量的内容(具体的内容,比如/root就是一个具体的内容)
$?:上一条命令执行后返回的状态,当返回状态值为0时,表示 执行正常,非0时值表示执行异常或出错
判断是不出现错误正常为0,异常错误为非0 取值在1-127之间
$0:当前执行的进程/ 程序名(就是当前执行的命令或程序的名字)
$!:表示上一个命令最后一个参数
_______________________________________________________________________________________________
sed
________________________________________________________________________________________________
awk
AWk是一种优良的文本处理工具,Linux和Unix环境中现有的功能最强大的数据处理引擎之一。这种
编辑及数据操作语言的最大功能取决于一个人所拥有的知识。awk命令:Alfred Aho Peter Weinberger和
brian kemighan三个人的姓的缩写
最简单报地说,AWK是一种用于处理文本的编程语言工具。
任何awk语句都是由模式和动作组成,一个awk脚本可以有多个语句。模式决定动作语句的触发条件和触发时间。
特殊字段
BEGIN 语句设置计数和打印头部信息,在任何动作之前进行。
END语句输出统计结果,在完成动作之后执行。
分隔符默认是空格,可以用-F,改变成逗号为分隔符 -F,或改成冒号-F:
准备要显示的内容:
vim result.txt
andy 4 85 92 78 94 88
bob 6 89 90 75 90 86
claire 9 84 88 80 92 84
dave 5 94 52 84 86 NA