第2章 ***********sed***********. 1目  录

2.1 -------sed命令小结及小结图---- 1

2.2 -------第几行---------- 2

2.3 -------最后一行---------- 2

2.4 ---------从哪行到哪行-------- 3

2.5 -------某几行--------- 3

2.6 ---------上插入行----------- 3

2.7 -----------不包含oldboy(条件)----- 4

2.8 -----sed不显示空行----------- 4

2.9 ------------把所有小写字母()起来----- 4

2.10 -----变量运用------ 5

2.11 --------------命令行chkconfig优化开机自启----- 6

2.12 ----------找特定行替换某一些内容----- 6

2.13 -----------显示和不显示,要取消默认输出... 7

2.14 --------------chkconfig 用sed优化----------- 8

第3章 -------shell基础------- 9

3.1 --------写脚本---- 9

3.2 -------------变量-------- 9

3.3 -----------永久生效有几种-- 10

3.4 ---------  普通变量,环境变量与脚本---------- 10

3.5 ------------------vim批量加内容v  Ctrl+v---- 11

3.6 ----------awk支持小数的计算------------ 11

3.7 ---------read与计算应用----------- 12

3.8 --------------test和[  ] 进行条件判断----------------- 14

3.9 ----&& || 条件判断---------- 14

3.10 ------------如果---- 15

3.11 -----------if条件判断------- 15

3.12 -------------- 参数个数判断------------- 15

3.13 ------------for循环------- 18

3.14 ------------chkconfig优化开机自启动服务的脚本----- 19

3.15 ------------出错暂时无法解决的脚本-------- 19

3.16 ------------应该再来一个对是否是数字的判断----- 20

3.17 ------------查看脚本执行的状况- sh -x  --------- 21

第4章
**************awk*******. 21

4.1 ------awk执行流程图... 21

4.2 -----------awk数组结构-------- 22

4.3 ------awk执行过程表--------- 22

4.4 ---------awk分隔符哪行哪列-------- 24

4.5 --------awk题---------- 24

4.6 -----------awk替换------------ 26

4.7 ----企业案例3:统计/etc/services文件里面的空行数量--- 27

4.8 --------awk 数组----------- 28

4.9 -------企业面试题1:统计域名访问次数---- 处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题) http://www.etiantian.org/index.html http://www.etiantian.org/1.html http://post.etiantian.org/index.html http://mp3.etiantian.org/index.html http://www.etiantian.org/3.html http://post.etiantian.org/2.html 30

4.10 ---------awk统计的课后题------- 31

4.11 ----------awk识别花括号加条件---- 34

4.12 ----- a[$1]=a[$1]+$2----- 35

4.13 5. ip出现次数及使用流量... 36

4.14 ------awk 中的begin---------- 40

4.15 ------------awk版本4以上有替换功能----- 41

第5章 ---------总结大集合----- 41

5.1 -------查看端口总结 
踢死了妮妮(tslnn)------- 42

5.2 ----------- 排查无法上网总结  3p----- 43

5.3 --------------  vi/vim快捷方式总结---- 44

5.4 ---sed总结-------- 46

5.5 ------awk总结--------- 46

5.6 ------rename----- 47

第2章 ***********sed***********

2.1 -------sed命令小结及小结图----

sed 参数 条件 命令(sed内置命令) 文件

命令:i,a,d,s,p

默认输出,取消默认输出;找谁做什么,不做什么,(替换不替换,显示不显示,可以插加不插加吗,可以删不删吗)

!:放在命令前吗?

增:(行号i  行号a 内容)上插下追,insert
append ,加多行操作\n cat也能多行追加

删:d    同,命令改d

改(替换):'Ms###Ng' M查找s 替换,
g 全局替换 缺省替换行第一个,加数字几就是找到的第几个进行替换,ng从哪个到最后替换。变化的定义成变量,再替换,双引号解析,双引号变量替换成变量。找到哪行替换,找到不包含谁的行不替换(排除哪行其他行替换)

四组长吴 2017/9/19 9:02:59

可以sed '2s#[0-9]#<&>#2p'  精准定位到第二行的第二个匹      配项

查:p,-n打印经常要取消默认输出, ;单行,多行,第几行到第几行,哪儿到哪儿,逗号隔开,;某几行,分号隔开条件加命令;日志第一个15到第一个08,最后一行$

p和d显示不显示谁,d相当于排除显示

cat
>person.txt <<EOF
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
EOF

2.2 -------第几行----------

[root@小马过河 old]# sed -n '3p' person.txt

103,Alex,COO

[root@小马过河 old]# sed -n '/oldboy/p' person.txt

101,oldboy,CEO

2.3 -------最后一行----------

方法一:

[root@小马过河 old]# sed -n '$p' person.txt

105,feixue,CIO

方法二:

[root@小马过河 old]# sed -n "\$p" person.txt

105,feixue,CIO

2.4 ---------从哪行到哪行--------

[root@小马过河 old]# sed -n '2,4p' person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

[root@小马过河 old]# sed -n '/zhangyao/,/yy/p' person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

[root@小马过河 old]#

2.5 -------某几行---------

[root@小马过河 old]# sed -n '2p;3p;5p' person.txt

102,zhangyao,CTO

103,Alex,COO

105,feixue,CIO

lrzsz  zip文件两个系统均能用,xshell属性指定下载/加载路径

离开死s,过来ri

[root@小马过河 old]# zip -r a.zip /etc/services 
  adding: etc/services (deflated 80%)

压缩了百分比

2.6 ---------上插入行-----------

[root@小马过河 old]# sed '/zhangyao/i wo shi machangwei' person.txt

101,oldboy,CEO

wo shi machangwei

102,zhangyao,CTO

2.7 -----------不包含oldboy(条件)-----

方法一:

[root@小马过河 old]# sed  -n '/oldboy/!p'
person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

方法二:

[root@小马过河 old]# sed '/oldboy/d' person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

2.8 -----sed不显示空行-----------

[root@小马过河 ~]# cat 1.txt |sed 
'/[a-z0-9:/]/!d'

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

2.9 ------------把所有小写字母()起来-----

[root@小马过河 ~]# sed 's#([a-z])#(\1)#g' 1.txt -r

(r)(o)(o)(t):(x):0:0:(r)(o)(o)(t):/(r)(o)(o)(t):/(b)(i)(n)/(b)(a)(s)(h)

(b)(i)(n):(x):1:1:(b)(i)(n):/(b)(i)(n):/(s)(b)(i)(n)/(n)(o)(l)(o)(g)(i)(n)

[root@小马过河 ~]# sed 's#[0-9]#<&>#3' person.txt

10<1>,oldboy,CEO

10<2>,zhangyao,CTO

10<3>,Alex,COO

10<4>,yy,CFO

10<5>,feixue,CIO

[root@小马过河 ~]# sed 's#,#(,)#' person.txt

101(,)oldboy,CEO

102(,)zhangyao,CTO

103(,)Alex,COO

104(,)yy,CFO

105(,)feixue,CIO

2.10 -----变量运用------

[root@小马过河 ~]# sed "s#$ma#m#g" person.txt

101,oldboy,mEO

102,zhangyao,mTO

103,Alex,mOO

104,yy,mFO

105,feixue,mIO

[root@小马过河 ~]# sed "s#$ma#m$mam#g" person.txt

101,oldboy,mEO

102,zhangyao,mTO

103,Alex,mOO

104,yy,mFO

105,feixue,mIO

[root@小马过河 ~]# sed "s#$ma#m$ma#g" person.txt

101,oldboy,mCEO

102,zhangyao,mCTO

103,Alex,mCOO

104,yy,mCFO

105,feixue,mCIO

[root@小马过河 ~]# sed "s#$ma#$ma#g" person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[root@小马过河 ~]# sed "s#$ma#$mam#g" person.txt

101,oldboy,EO

102,zhangyao,TO

103,Alex,OO

104,yy,FO

105,feixue,IO

[root@小马过河 ~]#

2.11 --------------命令行chkconfig优化开机自启-----

[root@小马过河 ~]# chkconfig|sed -rn '/sshd|network|rsyslog|crond|systat/!s#^(.*)0:.*$#chkconfig
\1 off#gp'|bash

找到!不替换,取消它的默认输出,

[root@小马过河 ~]#

[root@小马过河 ~]# chkconfig|sed -r '/sshd|network|rsyslog|crond|systat/d'|sed -r
's#^(.*)0:.*$#chkconfig \1 off#g'|bash

[root@小马过河 ~]# chkconfig

2.12 ----------找特定行替换某一些内容-----

其他行为默认输出

[root@小马过河 ~]# sed '/yy/s#[0-9]##g' person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

,yy,CFO

105,feixue,CIO

不包含yy的行前面的数字替换,默认输出和取消默认输出

[root@小马过河 ~]# sed -n '/yy/s#[0-9]##gp' person.txt

,yy,CFO

[root@小马过河 ~]# sed -n '/yy/!s#[0-9]##gp' person.txt

,oldboy,CEO

,zhangyao,CTO

,Alex,COO

,feixue,CIO

root@小马过河 ~]# sed '/yy/!s#[0-9]##g' person.txt

,oldboy,CEO

,zhangyao,CTO

,Alex,COO

104,yy,CFO

,feixue,CIO

2.13 -----------显示和不显示,要取消默认输出

[root@小马过河 ~]# sed -n '/old/!p' person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[root@小马过河 ~]# sed -n '/old/p' person.txt

101,oldb

除了要找的显示一次其余的显示两次

[root@小马过河 ~]# sed '/old/!p' person.txt

101,oldboy,CEO

102,zhangyao,CTO

102,zhangyao,CTO

103,Alex,COO

103,Alex,COO

104,yy,CFO

104,yy,CFO

105,feixue,CIO

105,feixue,CIO

找到谁不删除和找到谁删除,不需要取消默认输出,可以用来显示哪行不显示哪行(不要空要空呢?)

[root@小马过河 ~]# sed  '/old/d' person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[root@小马过河 ~]# sed  '/old/!d' person.txt

101,oldboy,CEO

2.14 --------------chkconfig 用sed优化-----------

方法总结:如果想要引用一堆东西中的某一列然后批量生成其它的东西,一个方法是用sed找到找一列,保护起来反向引用替换成想要的批量命令,交给bash执行。即是用sed批量生成含有某一列变量的各种内容

先批量显示一下做得命令,不要忘了交给bash执行。for循环哪里也有一个方法

sshd          
      0:off      1:off      2:on       3:on       4:on       5:on       6:off

svnserve      
0:off      1:off      2:on       3:on       4:on       5:on       6:off

sysstat       
0:off      1:on       2:off      3:off      4:off      5:off      6:off

udev-post     
       0:off      1:on       2:on       3:on       4:on       5:on       6:off

[root@小马过河 scripts]# chkconfig|sed -nr
'/sshd|network|crond|sysstat|rsyslog/!s#(.*)0:.*#chkconfig \1 off#gp'|bash

[root@小马过河 scripts]# chkconfig

abrt-ccpp     
0:off      1:off      2:off      3:off      4:off      5:off      6:off

abrtd         
       0:off      1:off      2:off      3:off      4:off      5:off      6:off

acpid         
      0:off      1:off      2:off      3:off      4:off      5:off      6:off

atd           
      0:off      1:off      2:off      3:off      4:off      5:off      6:off

auditd        
       0:off      1:off      2:off      3:off      4:off      5:off      6:off

blk-availability    0:off      1:on       2:off      3:off      4:off      5:off      6:off

cpuspeed      
      0:off      1:on       2:off      3:off      4:off      5:off      6:off

crond         
      0:off      1:off      2:on       3:on       4:on       5:on       6:off

条件,判断,循环,变量

定义函数,case判断执行

第3章 -------shell基础-------

3.1 --------写脚本----

命令解释器:(几个人,交给bash执行)

注释:路径,作者

脚本

---------

绝对路径,相对路径执行脚本 相对要有执行权限

3.2 -------------变量--------

环境变量  普通变量   特殊变量

sed 外面删除内容

3.3 -----------永久生效有几种--

3.4 ---------  普通变量,环境变量与脚本----------

执行脚本使用变量,普通变量放入脚本或(export)定义成环境变量才可以

a=213

[root@小马过河 scripts]# sh a

[root@小马过河 scripts]# export a=213

[root@小马过河 scripts]# sh a

213

unset 变量
取消变量,环境的也可以

用户登录显示的东西,运行的脚本/etc/profile.d/

/etc/profile、/etc/bashrc、
        /etc/profile.d/   
~/.bash_profile ~/.bashrc

[root@小马过河 profile.d]# ma=2

[root@小马过河 profile.d]# echo $ma

2

[root@小马过河 profile.d]# echo $mam

[root@小马过河 profile.d]# echo $ma m

2 m

[root@小马过河 profile.d]# echo "$ma"m                     方法一

2m

[root@小马过河 profile.d]# echo ${ma}m                     方法二

2m

[root@小马过河 profile.d]# echo ·$m·am                      错误一

··am

[root@小马过河 scripts]# echo `$a`a                          错误二

-bash: 1: command not found

a

[root@小马过河 scripts]# echo $($a)a                         错误三

-bash: 1: command not found

a

3.5 ------------------vim批量加内容v  Ctrl+v----

单用户进入,救援模式进入

vi从第几行到最后一行,:n,$s###g

当前行到最后一行:  :.$

所有航

批量加内容v  Ctrl+v 上下左右选中输入内容,按Esc退出,不能用Alt选中,因为Alt是xshell功能,不是vim的功能

3.6 ----------awk支持小数的计算------------

[root@小马过河 scripts]# awk -va=1 -vb=3 'BEGIN{print a/b}'

0.333333

[root@小马过河 scripts]# vim 1.t

#!/bin/bash

echo $1 $3 $0 $#                                  怎么使用参数

[root@小马过河 scripts]# sh 1.t

1.t 0

[root@小马过河 scripts]# sh 1.t a b c d e

a c 1.t 5

[root@小马过河 scripts]# echo $?            
#$?看上一个命令执行的状况

可以看命令行的,可以看脚本执行情况的

0

[root@小马过河 scripts]# s 1.t a b c d e

-bash: s: command not found

[root@小马过河 scripts]# echo $?

127

$?有脚本?

:noh

3.7 ---------read与计算应用-----------

[root@小马过河 scripts]# vim cal.sh

#!/bin/bash

read  -t40
-p "输入你的游戏帐号:"
a \n

read  -t40
-p "输入你的游戏帐号:"
b \n

#a=$1

#b=$2

#echo a + b|bc

#echo a - b|bc

#echo a \* b|bc

#echo a \/ b|bc

#echo a \% b|bc

#echo a \^ b|bc

awk -va=$a -vb=$b 'BEGIN{print a+b}'

awk -va=$a -vb=$b 'BEGIN{print a-b}'

awk -va=$a -vb=$b 'BEGIN{print a*b}'

awk -va=$a -vb=$b 'BEGIN{print a/b}'

awk -va=$a -vb=$b 'BEGIN{print a%b}'

awk -va=$a -vb=$b 'BEGIN{print a^b}'

~

~

"cal.sh" 17L, 434C written

[root@小马过河 scripts]# sh cal.sh

输入你的游戏帐号:4

输入你的游戏帐号:3

7

1

12

1.33333

1

64

[root@小马过河 scripts]# vim cal.sh

#!/bin/bash

read  -t40
-p "输入你的游戏帐号:"
a \n

read  -t40
-p "输入你的游戏帐号:"
b \n

echo $a + $b|bc

echo $a - $b|bc

echo $a \* $b|bc

echo $a \/ $b|bc

echo $a \% $b|bc

echo $a \^ $b|bc

#awk -va=$a -vb=$b 'BEGIN{print a+b}'

#awk -va=$a -vb=$b 'BEGIN{print a-b}'

#awk -va=$a -vb=$b 'BEGIN{print a*b}'

#awk -va=$a -vb=$b 'BEGIN{print a/b}'

#awk -va=$a -vb=$b 'BEGIN{print a%b}'

#awk -va=$a -vb=$b 'BEGIN{print a^b}'

~

~

~

~

"cal.sh" 15L, 434C written

[root@小马过河 scripts]# sh cal.sh

输入你的游戏帐号:4

输入你的游戏帐号:3

7

1

12

1

1

64

[root@小马过河 scripts]#

[root@小马过河 scripts]# find . -name "machangwei"

[root@小马过河 scripts]# echo $?

0

[root@小马过河 scripts]# cat machangwei

cat: machangwei: No such file or directory

[root@小马过河 scripts]# echo $?

1

3.8 --------------test和[  ] 进行条件判断-----------------

[root@小马过河 scripts]# test -f changwei

[root@小马过河 scripts]# echo $?

1

[root@小马过河 scripts]# test -f a

[root@小马过河 scripts]# echo $?

0

[root@小马过河 scripts]# [ -d ma ]

[root@小马过河 scripts]# echo $?

1

[root@小马过河 scripts]# mkdir changwei

[root@小马过河 scripts]# [ -d changwei ]

[root@小马过河 scripts]# echo $?

0

3.9 ----&& || 条件判断----------

[root@小马过河 scripts]# [ -d changwei
]&&echo dir exit

dir exit

我感觉机子在前一个命令结束之后有一个对返回值的判断

[root@小马过河 scripts]# [ -f sss ]||touch sss

[root@小马过河 scripts]# ls

1.t  a  cal.sh 
cal.sh.bak  changwei  date.sh 
html.sh  ip.sh  sss 
tar.sh

[root@小马过河 scripts]# [ -d xiaoma ]&&echo dir exit

[root@小马过河 scripts]#

3.10 ------------如果----

如果文件不存在就干啥,如果文件存在就不干啥了

3.11 -----------if条件判断-------

[root@小马过河 scripts]# sh if.sh

[root@小马过河 scripts]# ll maxiaowei

total 0

[root@小马过河 scripts]# cat if.sh

#!/bin/bash

if [ -d maxiaowei ];

then

echo
maxiaowei exit

else

mkdir
maxiaowei

fi

[root@小马过河 scripts]#

3.12 -------------- 参数个数判断-------------

"canshu.sh" 10L, 135C written

[root@小马过河 scripts]# sh canshu.sh 2 3

5

[root@小马过河 scripts]# sh canshu 2

sh: canshu: No such file or directory

[root@小马过河 scripts]# sh canshu.sh 2 3

5

[root@小马过河 scripts]# sh canshu.sh  2

canshu wei 2

[root@小马过河 scripts]# cat canshu.sh

#!/bin/bash

a=$1

b=$2

if [  $# -ne
2 ];

then

echo  canshu wei 2

exit

else

awk
-va=$a -vb=$b 'BEGIN{print a+b}'

fi

[root@小马过河 scripts]#

[root@小马过河 scripts]# sh canshu.yuan 4 3

7

1

12

1.33333

1

[root@小马过河 scripts]# sh canshu.yuan 4

canshu wei 2

[root@小马过河 scripts]# cat anshu.yuan

cat: anshu.yuan: No such file or directory

[root@小马过河 scripts]# cat canshu.yuan

#!/bin/bash

a=$1

b=$2

if [  $# -ne
2 ];

then

echo  canshu wei 2

exit

else

awk
-va=$a -vb=$b 'BEGIN{print a+b}'

awk
-va=$a -vb=$b 'BEGIN{print a-b}'

awk
-va=$a -vb=$b 'BEGIN{print a*b}'

awk
-va=$a -vb=$b 'BEGIN{print a/b}'

awk
-va=$a -vb=$b 'BEGIN{print a%b}'

fi

[root@小马过河 scripts]#

高超的脚本:

[root@小马过河 scripts]# sh gaochao.sh

命令错误 请输入两个数字

[root@小马过河 scripts]# sh gaochao.sh 4 5

I love you 开始输出结果

相加结果

9

相减结果

-1

相乘结果

20

相除结果

0.8

[root@小马过河 scripts]# cat gaochao.sh

#!/bin/bash

num=$#

if [ "$num" -ne "2" ] ; then

echo
"命令错误 请输入两个数字"

exit 1

else

echo
-e "I love you 开始输出结果\n"

fi

a=$1

b=$2

echo
"相加结果"

awk -vnum1=$1 -vnum2=$2 'BEGIN{print num1+num2}'

echo
"相减结果"

awk -vnum1=$1 -vnum2=$2 'BEGIN{print num1-num2}'

echo
"相乘结果"

awk -vnum1=$1 -vnum2=$2 'BEGIN{print num1*num2}'

echo
"相除结果"

awk -vnum1=$1 -vnum2=$2 'BEGIN{print num1/num2}'

[root@小马过河 scripts]#

结合一下 read

结合函数

3.13 ------------for循环-------

多个变量就循环

for n in xx

do

done

定义变量在哪,

对每一个变量值循环操作

[root@小马过河 scripts]# vim wenjian.sh

#!/bin/bash

for hd in {01..20}

do

date -s
"201705$hd"

touch
/tmp/taojin-$(date +%F).txt

done

for hd in 2017-05-{01..20}
do
date -s $hd
filename=$(date +%F)
touch $filename".txt"
done

3.14 ------------chkconfig优化开机自启动服务的脚本-----

a=里面的命令放在命令行执行要|bash,在这里不需要应该是因为它在脚本里,执行脚本时就已经使用执行命令了

[root@小马过河 scripts]# cat youhuakaiji.sh

#!/bin/bash

a=`chkconfig|sed -nr
'/sshd|network|cron|sysstat|rsyslog/!s#(.*)0:.*#\1#gp'`

for machangwei in $a

do

chkconfig
$machangwei off

done

[root@小马过河 scripts]#

同学的脚本

#!/bin/bash
for n in $(chkconfig|sed -r '/sshd|network|crond|sysstat|rsyslog/d'|sed -r 's#^(.*)0:.*$#\1#g')
do
   chkconfig  $n off
done

3.15 ------------出错暂时无法解决的脚本--------

问题:有read命令,但是无法使后面的计算得到执行

思路拓展:是否需要有个对输入是数字的判断呢

[root@小马过河 scripts]# vim canshu.sh

#!/bin/bash

read -p "请输入两个数字:" a

read -p "请输入两个数字:" b

a=$1

b=$2

if [  $# -ne
1 ];

then

echo 警告:应输入两个数字!!

exit

else

awk
-va=$a -vb=$b 'BEGIN{print a+b}'

awk
-va=$a -vb=$b 'BEGIN{print a-b}'

awk
-va=$a -vb=$b 'BEGIN{print a*b}'

awk
-va=$a -vb=$b 'BEGIN{print a/b}'

awk
-va=$a -vb=$b 'BEGIN{print a%b}'

fi

[root@小马过河 scripts]# sh canshu.sh

请输入两个数字:1 3

请输入两个数字:3

警告:应输入两个数字!!

[root@小马过河 scripts]# sh canshu.sh

请输入两个数字:1

请输入两个数字:3

警告:应输入两个数字!

3.16 ------------应该再来一个对是否是数字的判断-----

[root@小马过河 scripts]# sh canshu.sh # # # # # # # #

警告:应输入两个数字!!

[root@小马过河 scripts]# sh canshu.sh nishi shui?

0

0

0

awk: fatal: division by zero attempted

awk: fatal: division by zero attempted in `%'

3.17 ------------查看脚本执行的状况- sh -x  ---------

计算器加上判断参数个数,扩展判断这两个参数是否为数字。

课后练习题:批量创建用户并设置随机密码

第4章 **************awk*******

------------awk--------

4.1 ------awk执行流程图

4.2 -----------awk数组结构--------

4.3 ------awk执行过程表---------

取列计算(统计)

条件行(可用行列),哪列,

awk 内置变量  指定分隔符FS,指定输出分隔符OFS,最后一列NF,倒数第几列$(NF-n),只要哪列可以最好以这列前后作为分隔符 多个相同字符加+(+正则表达),指定行分隔符RS,支持正则表达式,

可加字符""

算多少行,'{i++}END
print i'

算每行数量相加 '{i=i+$0($1)}END
print i'

取哪列 $数字,$0所有列就是全行内容

像平面直角坐标系,找列^$

替换sed好

计算awk

!可放在~前

mkdir -p /server/files/
cat >>/server/files/reg.txt <<EOF
Zhang Dandan    41117397   :250:100:175
Zhang Xiaoyu    390320151  :155:90:201
Meng  Feixue    80042789   :250:60:50
Wu    Waiwai    70271111   :250:80:75
Liu   Bingbing  41117483   :250:100:175
Wang  Xiaoai    3515064655 :50:95:135
Zi    Gege      1986787350 :250:168:200
Li    Youjiu    918391635  :175:75:300
Lao   Nanhai    918391635  :250:100:175
EOF

m 第一列是姓氏
m 第二列是名字
m 第一第二列合起来就是姓名
m 第三列是对应的ID号码
m 最后三列是三次捐款数量

4.4 ---------awk分隔符哪行哪列--------

条件:

模糊找行

找列有模糊条件的行

[root@小马过河 ~]# awk '$2~/waiwai/' /server/files/reg.txt

[root@小马过河 ~]# awk '$2~/X/' /server/files/reg.txt

Zhang Xiaoyu    390320151 
:155:90:201

Wang 
Xiaoai    3515064655 :50:95:135

Zhang Xiaoyu    390320151 
:155:90:201

Wang 
Xiaoai    3515064655 :50:95:135

4.5 --------awk题----------

1显示Xiaoyu的姓氏和ID号码
2显示所有ID号码最后一位数字是1或5的人的全名
3姓氏是Zhang的人,显示他的第二次捐款金额及她的名字
4显示Xiaoyu的捐款.每个值时都有以$开头.如$520$200$135

1

[root@小马过河 files]# awk '$2~/Xiaoyu/{print $1,$3}' reg.txt

Zhang 390320151

Zhang 390320151

2.

方法一:

[root@小马过河 files]# awk '$3~/(1|5)$/{print $1$2,$3}' reg.txt

ZhangXiaoyu 390320151

WuWaiwai 70271111

WangXiaoai 3515064655

方法二:

[root@小马过河 files]# awk '$3~/[15]$/{print
$1$2,$3}' reg.txt

ZhangXiaoyu 390320151

WuWaiwai 70271111

WangXiaoai 3515064655

3.

[root@小马过河 files]# awk -F "[ :]+" '$1~/Zhang/{print $(NF-1),$2}'
reg.txt

100 Dandan

90 Xiaoyu

100 Dandan

90 Xiaoyu

[root@小马过河 files]# echo 12312312|tr "123" "abc"

abcabcab

4.

[root@小马过河 files]# awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $2,$NF}'
reg.txt

Xiaoyu $155$90$201

4.6 -----------awk替换------------

[root@小马过河 files]# awk '{gsub(/:/,"$",$NF);print $0}' reg.txt

Zhang Dandan 41117397 $250$100$175

Zhang Xiaoyu 390320151 $155$90$201

Meng Feixue 80042789 $250$60$50

~  !~

判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin),如果是显示用户名字

[root@小马过河 files]#
awk -F ":" '$NF!~/nologin$/{print $1}' /etc/passwd

root

sync

shutdown

[root@oldboyedu-40 files]# awk '{gsub(/:/,"$",$NF) ; print $0}' reg.txt |column -t
Zhang  Dandan    41117397    $250$100$175
Zhang  Xiaoyu    390320151   $155$90$201

awk读取之前就执行

4.7 ----企业案例3:统计/etc/services文件里面的空行数量---

不用end显示过程

用途:可以统计行数

[root@小马过河 files]# awk '/^$/' /etc/services |wc -l

16

[root@小马过河 files]# awk '/^$/' /etc/services |uniq -c

16

[root@小马过河 files]# awk '/^$/{i++} ; END{print i}' /etc/services

16

[root@小马过河 files]# awk '/^$/{++i} ; END{print i}' /etc/services

16

[root@小马过河 files]# awk '/^$/{i++} ; END{print i}' /etc/services

16

[root@小马过河 files]# awk '/^$/{i=i+1} ; END{print i}' /etc/services

16

用途:
可以对一列内容进行累加

seq 10 >num.txt 计算这个文件每一行数字相加的结果

i=i+$0 ===累积相加 累加

[root@oldboyedu-40 files]# awk '{i=i+$0;print i}' num.txt 
1
3
6
10
15
21
28
36
45
55
[root@oldboyedu-40 files]# awk '{i=i+$0}END{print i}' num.txt 
55

[root@小马过河 files]# awk '{i=i+$0};END {print i}' num.txt

5050

[root@小马过河 files]# awk '{i=i+$1};END {print i}' num.txt

5050

算多少行,'{i++}END print i'

算每行数量相加 '{i=i+$0($1)}END
print i'

'{hotel[$2]++;END print
hotel["www"]}'

hotel[]数组,$2为awk找到的第二列内容,将它放进hotel数组作为变量,++为将数组里面的相同变量进行统计,然后统计结果作为变量值。

4.8 --------awk 数组-----------

'{hotel[$2]++;END
print hotel["www"]}'

'{hotel[$2]++}END
{for (ma in hotel) print ma,hotel[ma]}'

{hotel[$2]++}:hotel[]数组,$2为awk找到的第二列内容,将它放进hotel数组作为变量,++为将数组里面的相同变量进行统计,然后统计结果作为变量值。

END:         没有的话就会显示awk命令执行过程

for (ma in hotel): 
定义变量ma 在数组hotel里

print ma,hotel[ma] : 
打印变量ma,以及变量值

用途:(简化:计算列重复值)

对ip地址去重并统计重复数

即对一列重复的内容去重并统计重复数.

[root@小马过河 files]# awk -F "[/]+" '{hao[$2]++}END{for (ma in
hao)print hao[ma],ma}' 1

1 mp3.etiantian.org

2 post.etiantian.org

3 www.etiantian.org

定义数组,定义变量为数组元素,打印变量名及变量值

[root@小马过河 files]# awk 'BEGIN{hotel[110]="lidao"
;hotel[119]="tanjiaoshou";hotel[121]="taojin";

print
hotel[110],hotel[119],hotel[121]}'

lidao tanjiaoshou taojin

[root@小马过河 files]#

4.9 -------企业面试题1:统计域名访问次数----
处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题)
http://www.etiantian.org/index.html
http://www.etiantian.org/1.html
http://post.etiantian.org/index.html
http://mp3.etiantian.org/index.html
http://www.etiantian.org/3.html
http://post.etiantian.org/2.html

方法一:

[root@小马过河 files]# cat 1

http://www.etiantian.org/index.html

http://www.etiantian.org/1.html

http://post.etiantian.org/index.html

http://mp3.etiantian.org/index.html

http://www.etiantian.org/3.html

http://post.etiantian.org/2.html

[root@小马过河 files]# awk -F "[/]+" '{print $2}' 1|sort|uniq -c|sort -r

3
www.etiantian.org

2
post.etiantian.org

1
mp3.etiantian.org

方法二:

[root@小马过河 files]# awk -F "[/]+" '{hao[$2]++}END{for (ma in
hao)print hao[ma],ma}' 1

1 mp3.etiantian.org

2 post.etiantian.org

3 www.etiantian.org

4.10 ---------awk统计的课后题-------

echo  ;echo 可以不换行输出吗?

课后题目:

#secure.zip access.zip

1.统计secure文件中谁在破解你的密码(统计出破解你密码的ip地址出现的次数)

2.统计access.log文件中对ip地址去重并统计重复数

3.统计access.log文件中网站一共使用了多少流量

4.统计access.log文件中每个ip地址使用了多少流量

  1. awk统计有失败的ip并计算个数

[root@小马过河 machangwei]# awk '$6~/Failed/{heike[$(NF-3)]++}END{for(ip in heike)
print heike[ip]"      "ip }'
secure-20161219|sort -nr

68652     
218.65.30.25

34326     
218.65.30.53

21201     
218.87.109.154

18065     
112.85.42.103

17164     
112.85.42.99

17163      218.87.109.151

17163     
218.87.109.150

2

[root@小马过河 machangwei]# awk '{print $1}' access.log|sort|uniq -c|sort -nr|head

12049
58.220.223.62

10856
112.64.171.98

1982
114.83.184.139

1662
117.136.66.10

1318
115.29.245.13

961
223.104.5.197

957
116.216.0.60

939
180.111.48.14

871
223.104.5.202

869
223.104.4.139

3.

方法一:

[root@小马过河 machangwei]# awk '{i=i+$10}END{print i}' access.log

2478496663

方法二:

[root@小马过河 machangwei]# sh tt

2478496663

[root@小马过河 machangwei]# cat tt

#!/bin/bash

awk '{a[$1]++}{for (b in a)print b}' access.log
>/machangwei/xiaoma

for i in 'cat /machangwei/xiaoma'

do

awk -v i="BASH"  '/i/{d=d+$10}END{print d}'
/machangwei/access.log

done

4.

[root@小马过河 machangwei]# awk '{a[$1]=a[$1]+$10}{for(b in a)print b,a[b]}'
access.log |head

101.226.61.184 24662

101.226.61.184 25188

101.226.61.184 25188

27.154.190.158 3084

101.226.61.184 32579

27.154.190.158 3084

101.226.61.184 32579

27.154.190.158 3084

114.94.29.165 491

101.226.61.184 44091

[root@小马过河 machangwei]# seq 20|sort

1

10

11

12

13

14

15

16

17

18

19

2

20

3

4

5

6

7

8

9

[root@小马过河 machangwei]# seq 20|sort -nr

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

4.11 ----------awk识别花括号加条件----

awk --posix '/[0-9]{1,5}/' secure-20161219

awk
--re-interval '/[0-9]{1,5}/' secure-20161219

假如现在有个文本,格式如下:

a  1

b  3

c  2

d  7

b  5

a  3

g  2

f  6

d  9

即左边是随机字母,右边是随机数字,要求写个脚本使其输出格式为:

即将相同的字母后面的数字加在一起,按字母的顺序输出。

a  4

b  8

c  2

d  16

f  6

g  2

4.12 ----- a[$1]=a[$1]+$2-----

功能:某一列变化的有重复的内容对应另一列变化的数,将这个同一个东西的对应值累加并将两者对应打印出来

[root@小马过河 machangwei]# awk '{a[$1]=a[$1]+$2}END{for (b in a)print a[b],b }'
cc

4 a

8 b

2 c

16 d

6 f

2 g

awk '{a[$1]=a[$1]+$2}END{for (b in a)print
a[b],b }' cc

{a[$1]=a[$1]+$2:
数组中很多变量,$1中第i个变量加上$2赋值给后一个第i个变量,实现第i个变量对应的$2的统计和,然后将统计和作为变量i的值

for (b in a) :     定义变量在数组a里

print a[b],b :     打印变量值,变量

4.13 5. ip出现次数及使用流量

[root@oldboyedu-40 files]# awk '{count[$1]++;sum[$1]+=$10}END{for(pol in count)print pol,count[pol],sum[pol]}' access.log |column -t|sort -rnk3 |head 
114.83.184.139   1982   31362956
117.136.66.10    1662   22431302
116.216.30.47    506    21466000

[root@oldboyedu-40-nb files]# awk 'BEGIN{print
"访问次数","使用流量","ip地址"}{ss[$1]++;mm[$1]+=$10}END{for(nn
in mm)print ss[nn],mm[nn],nn}' access.log |sort -n|column -t|head

访问次数  使用流量  ip地址

1        
0         101.226.65.105

1        
0         110.75.105.135

1        
0         110.75.105.47

1        
0         110.75.87.144

[root@小马过河 machangwei]# awk '{ips[$1]++;sum[$1]+=$10}{for(b in ips)print
b,ips[b],sum[b]}' access.log |head

101.226.61.184 1 24662

101.226.61.184 2 25188

[root@files]# awk
'{sums[$1]+=$10;sus[$1]++}END{for (sum in sums) print " 访问ip===> " sum " ip访问次数=====> " sus[sum] "
每次访问的流量
"sums[sum]/sus[sum]/1024"K" 
" 总流量:
"sums[sum]}' access.log |sort -nrk6 | head |column -t

访问ip===>  182.18.102.159   ip访问次数=====>  3   每次访问的流量  242.575K  总流量:  745189

访问ip===>  180.97.182.222   ip访问次数=====>  1   每次访问的流量  185.885K  总流量:  190346

访问ip===>  124.156.66.72    ip访问次数=====>  2   每次访问的流量  185.791K  总流量:  380500

访问ip===>  223.104.211.140  ip访问次数=====>  2   每次访问的流量  130.531K  总流量:  267327

访问ip===>  101.86.13.161    ip访问次数=====>  17  每次访问的流量  97.4069K  总流量:  1695660

访问ip===>  101.87.174.78    ip访问次数=====>  42  每次访问的流量  95.2861K  总流量:  4098063

访问ip===>  202.111.6.229    ip访问次数=====>  3   每次访问的流量  95.2354K  总流量:  292563

访问ip===>  61.171.38.1      ip访问次数=====>  74  每次访问的流量  92.072K   总流量:  6976851

访问ip===>  66.249.82.181    ip访问次数=====>  3   每次访问的流量  84.0768K  总流量:  258284

访问ip===>  125.86.90.242    ip访问次数=====>  19  每次访问的流量  82.5421K  总流量:  1605939

效果图

不用两个for就是这样,不好放在一起

4.14 ------awk 中的begin----------

可以|""里里面加内容,先begin,再中间,再end,如果|加在整个命令前面,begin里的内容也会加入,比如排序

[root@oldboyedu-40 files]# awk 'BEGIN{print "ip","count"}{count[$1]++}END{for(pol in count)print pol,count[pol]|"sort -rnk2"}' access.log  |head |column -t 
ip              count
58.220.223.62   12049
112.64.171.98   10856
114.83.184.139  1982
117.136.66.10   1662
115.29.245.13   1318
223.104.5.197   961
116.216.0.60    957
180.111.48.14   939
223.104.5.202   871

4.15 ------------awk版本4以上有替换功能-----

[root@小马过河 machangwei]# awk --version

GNU Awk 3.1.7

Copyright (C) 1989, 1991-2009 Free Software Foundation.

This program is free software; you can
redistribute it and/or modify

it under the terms of the GNU General Public
License as published by

the Free Software Foundation; either version 3 of
the License, or

(at your option) any later version.

This program is distributed in the hope that it
will be useful,

but WITHOUT ANY WARRANTY; without even the implied
warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.  See the

GNU General Public License for more details.

You should have received a copy of the GNU General
Public License

along with this program. If not, see
http://www.gnu.org/licenses/.

第5章 ---------总结大集合-----

cpu一个内核同时只能做一个事情,我们看到他做很多事是因为它不断切换的。比如一个人做会这件事,做会儿那件事,把做事时间无限缩短,相当于同时在做很多事情。

reinstall

5.1 -------查看端口总结  踢死了妮妮(tslnn)-------

查看端口是否开启五个:踢死了妮妮(tslnn),telnet,ss(netstat),lsof,nmap,nc

查看22端口是否开启  
1.telnet 
telnet 10.0.0.200 22 
2.ss 
ss -lntup|grep 22 
ss === netstat 
3.lsof 
lsof -i:22 
4.nmap 
[root@oldboyedu-40 files]# nmap -p22 10.0.0.200
PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds
[root@oldboyedu-40 files]# nmap -p25 10.0.0.200
PORT   STATE  SERVICE
25/tcp closed smtp

Nmap done: 1 IP address (1 host up) scanned in 2.61 seconds

5.
[root@oldboyedu-40 files]# nc 10.0.0.200 22
SSH-2.0-OpenSSH_5.3

Protocol mismatch.

ps -ef |grep sshd #进程是否在运行

yum install telnet tree lrzsz  nmap nc  dos2unix -y

5.2 ----------- 排查无法上网总结  3p-----

2)linux无法上网
   1]  ping

www.baidu.com

#是否能上网
   2]  ping

223.5.5.5

#DNS是否有问题
   3]  ping 网关          #

--------查看系统默认网关
route -n  =====

ifconfig 
ip a 
ifconfig eth0 
ip a s eth0 
ip address show eth0

route -n
ip route
ip r

5.3 --------------  vi/vim快捷方式总结----

vi/vim快捷方式

移动光标:

快速的达到文件的最后一行 G(shift+g)

快速达到文件的第一行     gg

快速达到文件的第100行 100gg     :100

移动光标到行首       0 ^

移动光标到行尾       $

编辑:

复制                               yy

粘贴                               p

剪切/删除当前行                    dd

删除光标所在位置到文件的最后一行   dG

删除光标所在位置到行尾             D  
=== d$

把光标移动到文件的结尾并进入编辑模式   A

在当前行下面插入一个空行并进入编辑模式 o(小写字母O)

删除光标所在位置的一个字符         x

撤销                               u

查找替换:

:1,10s#oldboy#oldgirl#g

:.,$s#oldboy#oldgirl#g    #.表示当前行

:%s#oldboy#oldgirl#g     
#1,$====%

查找替换移动:

:1,10s#oldboy#oldgirl#g

:.,$s#oldboy#oldgirl#g    #.表示当前行

:%s#oldboy#oldgirl#g     
#1,$====%

:1,5m[ove]10              #从第一行到底5行移动到第10行

:1,5co[py]10              #从第一行到底5行复制到第10行

批量操作:(可视块模式)

ctrl+v

ctrl+v 按I 编辑 
按esc

其他:

/搜索的内容   继续搜索n    继续向上搜索N

显示行号     :set nu

取消显示行号 :set nonu

s

5.4 ---sed总结--------

1.sed '找谁干啥'

删改查

d s p

5.5 ------awk总结---------

3.awk '找谁{干啥}'

NR==1

NR==1,NR==20

正则表达式

/oldboy/

$2~/oldboy/

NR>=20

$3>20

print

gsub(/找谁/,"替换为什么",在哪个部分)

计算

i=i+1  
i++

i=i+$2 
i+=$2

h[$1]=h[$1]+1   h[$1]++

h[$1]=h[$1]+$2  h[$1]+=$2

[root@oldboyedu-40 files]# awk
'BEGIN{for(i=1;i<=100;i++) sum=sum+i;print sum}'

5050

2.shell

变量分类

read

循环和判断

5.6 ------rename-----

[root@小马过河 ~]# rename bb "cc" bb

[root@小马过河 ~]# ls

1.txt            c    
d035      ett.txt  install.log         lrzsz-0.12.20.tar.gz  passwd.txt 
stu.sh

2.txt           
cc    data      f032    
install.log.syslog  ma                    person.txt  tandao

anaconda-ks.cfg 
d032  download  f035    
lrzsz-0.12.20       machangwei            services    x.t

[root@小马过河 ~]# rename x "e" *.t

[root@小马过河 ~]# ls

1.txt           
c     d035      e.t     
f035                lrzsz-0.12.20         machangwei  services

2.txt           
cc    data      ett.txt 
install.log         lrzsz-0.12.20.tar.gz  passwd.txt 
stu.sh

anaconda-ks.cfg 
d032  download  f032    
install.log.syslog  ma                    person.txt  tandao

别人给的一道题:第三行求和

[root@db01 ma]# vim ma.txt
sojfopsjfpsj
sfjpsjpf

方法一:

[root@db01 ma]# sed -n "3s#.#&\n#gp" ma.txt|awk '{i=i+$0}END{print i}'
12

  

方法二:

[root@db01 ma]# vim 3.sh
sum=0
shu=`awk NR==3 ma.txt|wc -L`
for i in `seq 1 $shu`
do
j=` awk NR==3 ma.txt|cut -c $i`
let sum=sum+j
done
echo $sum

  

sed-awk命令详解的更多相关文章

  1. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  2. linux awk命令详解,使用system来内嵌系统命令, awk合并两列

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  3. Shell学习(五)—— awk命令详解

    一.awk简介   awk是一个非常好用的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个[字段]处理,因此,awk相当适合处理小型的数据数据处理.awk是一种报 ...

  4. awk命令详解二

    awk命令详解 简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}'   :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: ...

  5. shell编程之awk命令详解

    shell编程之awk命令详解 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; out ...

  6. [Linux] linux awk命令详解

    reference : http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于g ...

  7. [Linux] AWK命令详解(大全)

    转载自:http://caoyanbao.iteye.com/blog/570868 什么是awk? 你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk ...

  8. Linux之awk命令详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  9. inux awk命令详解

    http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编 ...

  10. Ubuntu 14.10 下awk命令详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

随机推荐

  1. Object Detection with Discriminatively Trained Part Based Models

    P. Felzenszwalb, R. Girshick, D. McAllester, D. RamananObject Detection with Discriminatively Traine ...

  2. js通过ua标识判断h5页面是否内嵌在app内

    var userAgent = navigator.userAgent.toLowerCase();//获取UA信息 if(userAgent.indexOf("ezhouxing" ...

  3. 实现虚拟(Virtual)DOM

    Virtual DOM算法 把一个div元素的属性打印出来,如下: 可以看到仅仅是第一层,真正DOM的元素是非常庞大的,这也是DOM加载慢的原因. 相对于DOM对象,原生的JavaScript对象处理 ...

  4. html加载顺序以及影响页面二次渲染额的因素

    浏览器请求发往服务器以后,返回HTML页面,页面内容开始渲染,具体的执行顺序为: 1. 浏览器开始载入html代码,发现<head>标签内有一个<link>标签引用外部CSS文 ...

  5. WebGL学习笔记(4)

    本篇笔记加强了上篇笔记示例代码的程序,实现了使用nodejs-websocket来广播每个玩家的坐标数据并在同一个世界模型中进行多人在线交互. websocket服务端: 安装nodejs与npm,创 ...

  6. [USACO11OPEN]奶牛跳棋Cow Checkers(博弈论)

    题目描述 One day, Bessie decides to challenge Farmer John to a game of 'Cow Checkers'. The game is playe ...

  7. java的动态验证码单线设计

    1.java的动态验证码我这里将介绍两种方法: 一:根据java本身提供的一种验证码的写法,这种呢只限于大家了解就可以了,因为java自带的模式编写的在实际开发中是没有意义的,所以只供学习一下就可以了 ...

  8. .Net Core On Liunx 环境搭建之安装Mysql8

    上一篇文章安装了MongoDB紧接上一篇随笔,来进行MySql数据库的安装 服务器环境:阿里云云服务器,操作系统CentOS.7-x64 注:文章的图片是我从我的CSDN博客中直接粘贴过来的,不是扒的 ...

  9. python学习——装饰器函数

    一.装饰器函数的作用是什么 答:装饰器函数是在不修改原函数及其调用方式的情况下对原函数功能进行扩展 对于搞python开发的人来说,函数占据了至关重要的地位.都说学好函数你就可以去找工作了,好了,假如 ...

  10. R语言学习笔记(八):零碎知识点(16-20)

    16--complete.cases( ) complete.case()可以判断对象中是否数据完全,然后返回TRUE, FALSE 这一函数在去除数据框中缺失值时很有用. > d kids a ...