性能测试之linux

一、linux常用命令
date 命令:显示或设置日期和时间
这里写图片描述
语法:
date [+显示格式] 或 date [MMDDhhmm[[CC]YY][.ss]]
说明:
第一种语法可用来显示系统日期或时间,以% % 为开头的参数为格式参数,可指定日期或时间的显示格式。
  第二种语法可用来设置系统日期与时间。只有管理员才有设置日期与时间的权限。
  若不加任何参数, date 会显示目前的日期与时间。
  只有 root 用户才能更改系统时间,当以 root 身分更改了系统时间之后, , 请记得以 clock - -w w 来将系统时间写入CMOS 中, , 这样下次重新开机时系统时间才会持续保持最新的正确值。

示例:
1、date
2、date +%y/%m/%d-%H:%M:%S
3、date 032010052008.30
4、date –d ‘20080420’ +%a

cal 命令:日历工具
使用方式:cal [-m ] [month [year]]
说明:
显示日历。若只有一个参数, , 则代表年份 (1—9999), 显示该年的年历。年份必须全部写出。使用两个参数, , 则表示月份及年份。若没有参数则显示这个月的月历。
-m
例:显示公元 2008 年 3 月月历。
[root@localhost /root]# cal 3 2008

相对路径与绝对路径
绝对路径:路径的写法一定由根目录 / 写起,例如: /usr/s
hare/doc 这个目录。
相对路径:路径的写法不是由 / 写起,而是有用户的当前目
录写起。例如由 /usr/share/doc 要到 /usr/share/man 底
下时,可以写成:cd ../man 这就是相对路径的写法

. . 代表此层目录
.. 代表上层目录
~ 代表自己的 主目录 (有的地方也称 家目录 )
~ user 代表到 user 这个 用户的主目录

pwd 显示当前工作目录
语 法:pwd
说明:执行pwd指令可立刻得知目前所在的工作目录的绝对路径名称。由于很多的套件所使用的目录名称都相同,例如 /usr/local/etc 还有 /etc ,但是通常Linux仅列出最后面那一个目录而已,这个时候就可以使用 pwd 来知道你的所在目录
,免得搞错目录!

cd 切换工作目录
语 法:cd [目的目录]
说明:cd指令可让用户在不同的目录间切换,但该用户必须拥有足够
的权限进入目的目录。
范例:
[root @test /forest]# cd .. 回到上一层目录
[root @test /forest]# cd ../home 相对路径的写法
[root @test /forest]# cd /var/www/html 绝对路径的写法
[root @test /forest]# cd 回到用户主目录
[root @test /forest]# cd ~ 回到用户主目录
[root @test /forest]# cd ~test 回到 test 用户的主目录

注意,路径与 cd 指令之间存在一个空格

ls 显示目录中的目录和文件名
语 法: ls [选项] [文件目录列表]
说明: ls命令中最常用选项如下:
-a:显示所有文件及目录 (ls规定将文件名或目录名中开头为“.”的视为隐藏文件,不会列出)
-l:除文件名外,也将文件状态、权限、拥有者、文件大小等信息详细列出 。

who 命令:显示当前在系统中登录的所有用户名
who am I 命令:显示当前登录的用户名
Clear 命令:清除终端屏幕
ps 命令:显示当前登录会话的所有活动进程
exit 命令:终止 Linux 会话
shutdown 命令:关闭 Linux 操作系统
使用 passwd 命令可以更改密码
必须使用 chage 命令定期更改密码
要暂时获得 root 或超级用户权限 su

二、vi编辑器使用

**vi 是标准的 Linux 文本编辑程序( ( 相当于 windows 中的记事本) )
vi 不是基于窗口的,所以,这个多用途编辑程序可以用于在
任何类型的终端上编辑各式各样的文件**
格式:vi filename
如果 filename已经存在,vi会打开现存文件
如果是一个新文件,vi会创建它
屏幕的最后一行被称为状态行,用于显示文件名及文件中行和字符
的个数

vi的三种模式
1、编辑模式 — 输入文本
2、一般模式 —执行命令
3、命令行模式 —执行特定命令
一般模式:
在vi处理文件时,一进入该文件就是一般模式了。在这个模
式下,可以进行光标的定位、复制和粘贴文本、删除文本
。此为默认模式。
编辑模式:
当你想输入新的字符的时候,就要用到此模式。在你按下i
、I、a、A、o、O等字母后就会进入编辑模式,编辑模式
的一个特征就是在屏幕的左下角会出现INSERT字样。
命令行模式:
主要用于保存文件,完成文本的查找与替换操作。
一般模式下的常用光标定位指令:
移动光标到文件的最后一行 G
跳到指定行:nG(n=1,2,….) 例如:跳到第3行 3G
从当前行后跳n行 n(回车)
在一行内,移动光标到行首0 (数字,非字母),移动到行尾$
上翻屏: ctrl+f
下翻屏: ctrl+b
一般模式下的复制、粘贴
复制单行 先移动光标到该行上,然后用命令yy进行复制,再移动光标到目的位置按p进
行粘贴。
复制多行 nyy (n用确定的数字来代替,如3),再移动光标到目的位置按p进行粘贴。
一般模式下的删除
删除单个字符 x
连续删除n个字符 nx (n用确定的数字来代替)
删除整行 dd
删除连续的n行 ndd (n用确定的数字来代替)
一般模式下的撤消相关
恢复上次作的修改 u (可连续使用)

命令行模式下的查找与替换
/word 在当前光标之后查找名为word的字符串
?word在当前光标之前查找名为word的字符串
:n1,n2 s/word1/word2/g 在第n1和n2行之间查找word1
字符串,并将该字符串换成word2
:1, s/word1/word2/g11word1word21 s/word1/word2/gc 在第1和最后1行之间查找word1
字符串,并将该字符串换成word2,并提示用户确认。

命令行模式下的文件保存
:w 将正在保存的文件保存
:w! 将正在保存的文件强制保存
:w filename 另存为
:q 不保存退出
:q! 不保存强制退出
:wq 保存后退出
:wq! 保存后强制退出
命令行模式下的显示行号开关
:set nu 显示行号
:set nonu 不显示行号

三、Linux下Shell编程

**什么是shell
在多用户环境中,shell 将用户界面与内核分开。
shell 可解释各种内核命令并充当用户与内核之间
的 接口**

[root@forest root]# echo $SHELL
/bin/bash
shell 是解释用户在终端键入的命令的一种 中间程序。 我们可以把之前学习的命令写成shell 脚本程序 让shell 解释执行

shell种类:bash、sh、csh、ksh、tcsh、zsh……
Linux默认的是bash
可以参看/bin目录中的内容
shell可以把它理解为一种脚本编程语言,什么是shell程序呢? 简单的说shell程序就是一个包含若干行shell或者linux命令的文件。
现在使用最多的shell脚本一般为sh,我们也可以直接用bash。实际上他们是同一个东西。

对于基本的Linux操作,可以不需要知道怎样撰写shell脚本,但是应该可以看懂简单的shell脚本。
shell脚本是一个可以使用的可执行程序,它汇整一些需要操作的一串连续的指令,与那些二进制的执行文件有相同的执行方式。
linux的很多功能是靠一些脚本程序完成的。
如果是系统管理员或Linux的开发人员,应该了解相应的脚本知识。
请记住:bash既是一个命令,又是一个脚本的解释器,它可以执行一个
命令组合成的程序。

脚本执行
scripts脚本执行时bash会根据下面的规则判断执行的步骤:
1、如果读取到一个回车符号( CR ),就尝试开始执行该行命令;
2、如同前面 bash命令提到的,指令间的多个空白会被忽略掉;
3、空白行也将被忽略掉,并且 tab 也是不会被理会的;
4、至于如果一行的内容太多,则可以使用 \ 来延伸至下一行;
5、此外,使用最多的 # 可做为批注.任何加在 # 后面的字符,将全部被
视为批注文字而被忽略。

在撰写脚本的好习惯:
1、第一行宣告使用的 shell 为何?(如果不声明使用默认的shell解释,
通常应该声明)

#!/bin/sh
#!/bin/bash

2、注明该 script 的内容功能、版本信息、作者、创建文件日期等
3、每一个大步骤的主要功能(也顺便提供自己未来修改时使用)

脚本执行的方法:
1、一个是将该脚本文件改成可以执行的属性,如chmod 75
5 scripts.file ,然后执行该脚本文件;
2、另一种则是直接以 sh或bash 这个执行文件来执行 script
的内容,如:
sh scripts.file
bash scripts.file

建立第一个脚本文件

[root @test test]# vi test01.sh
#!/bin/bash
#  这个脚本是在屏幕输出Hello ! How are you  ?
# Made by homeyw
hello=Hello\ \!\ How\ are\ you\ \?
echo $hello
[root @test test]# sh test01-hello.sh
Hello !
How are you ?

注意:
1、所有在脚本中的东西,基本规则 ( 如变量设定规则 ) 需要与命令提示符下时
相同;
2、脚本的后缀最好为 .sh 提供他人的认识;
3、并非加上 .sh 就可以是执行文件,还需要查看其属性中是否有 x 这个属性。
比较单引号与双引号的区别的脚本:

[root @test test]# vi test02.sh
#!/bin/bash
# 这个脚本用途在于引用两个变量,顺便比较一下\ " 与 ' 的
异同
# Made by homeyw
name=“homeyw"
myname1="My name is $name"
myname2='My name is $name'
echo $name
echo $myname1
echo $myname2

卷标与运算符:
declare 声明变量内容命令
语法: [test @test test]# declare [-afirx]
参数说明:
-a :定义为数组 array
-f :定义为函数 function
-i :定义为整数 integer
-r :定义为只读
-x :定义为通过环境输出变量 (export命令)
范例:

[test @test test]# declare -i a=3
[test @test test]# declare -i b=5
[test @test test]# declare -i c=$a*$b
[test @test test]# echo $c
15

示例:

[root @test test]# vi test03.sh
#!/bin/sh
# This program is used to "declare" variables
number1=2*3+5*13-32+25
declare -i number2=2*3+5*13-32+25
echo "Your result is ==> $number1"
echo "Your result is ==> $number2"
[root @test test]# sh test03-declare.sh
Your result is ==> 2*3+5*13-32+25
Your result is ==> 64

交互式脚本
read命令:
read 的功能就是依据您在键盘输入的内容存放到变量

[root @test test]# read name
homeyw <==这是键盘输入的结果
[root @test test]# echo $name
homeyw
[root @test test]# vi test04-read.sh
#!/bin/bash
# This program is used to "read" variables
#
echo "Please keyin your name, and press Enter to start."
read name
echo "This is your keyin data ==> $name"
[root @test test]# sh test04-read.sh
Please keyin your name, and press Enter to start.
homeyw
This is your keyin data ==> homeyw
定义一个脚本的参数的代号:
[root @test test]# myscript opt1 opt2 opt3 opt4
$0 $1 $2 $3 $4
[root @test test]# vi test05
#!/bin/bash
# This program will define what is the parameters
echo "This script's name => $0"
echo "parameters $1 $2 $3"
[root @test test]# sh test05 pa1 pa2 pa3
This script's name => test05
parameters pa1 pa2 pa3

脚本逻辑判断表达式
如何判定某个文件或目录,或者是如何判定程序应该朝向那个方向行进?
1、 关于文件与目录的检测
-f 常用。检测文件 是否存在
-d 常用。检测 目录是否存在
-L 检测是否为一个 symbolic link 的文件
-e 检测某个东西是否存在
2、关于文件的属性检测
-r 检测是否为可读的属性
-w 检测是否为可以写入的属性
-x 检测是否为可执行的属性
-s 检测是否为非空白文件
3、两个文件之间的判断与比较 ;例如 test file1 -nt file2
-nt 第一个文件比第二个文件新
-ot 第一个文件比第二个文件旧
-ef 第一个文件与第二个文件为同一个文件( link 之类的文件)
4、逻辑的 与(and) 或(or)
&& 逻辑的 AND 的意思
|| 逻辑的 OR 的意思
这里写图片描述
条件判断语句
条件判断一:if then fi 的方式 :
if [ 条件判断一 ] && (||) [ 条件判断二 ]; then
执行内容程序
elif [ 条件判断三 ]
执行第二段内容程序
else
执行第三段内容程序
fi
在中括号[ ]里面的是条件表达式,如果是复合表达式的条件判断(如若A及B则C
之类的逻辑判断),那么就需要在两个中括号之间加上 && (and)或者是 || (or)这
样的逻辑表达式才行!如果是多重选择的话,那么就需要以 elif 来新增另一个条
件;如果所有的条件都不适用,则使用 else 来进行最后的执行内容!
注意:
在 [ ] 当中,只能有一个判断式;
在 [ ] 与 [ ] 当中,可以使用 && 或 || 来组织判断式;
每一个独立的组件之间都需要有空格键来隔开。
示例:

[root @test test]# vi test06.sh
#!/bin/bash
echo “Press y to continueread yn
if [ “$yn” = “y” ]; then
echo “script is running...” ;
else
echo “stop!" ;
fi
[root @test test]# sh test06.sh
Press y to continue
y
script is running...
[root @test test]$ sh test06.sh
Press y to continue
n
stop!
[root @test test]# vi test07.sh
#!/bin/bash
# This program is used to study if then
echo "Press y to continue"
read yn
if [ "$yn" = "y" ] || [ "$yn" = "Y" ]; then
echo "script is running..." ;
else
echo "STOP!" ;
fi
[root @test test]# vi test08.sh
#!/bin/bash
# set parameters in the if then
# 需要加上 hello 这个参数才会显示正确的。
if [ "$1" = "hello" ]; then
echo "Hello! How are you ?"
elif [ "$1" = "" ]; then
echo "You MUST input parameters"
else
echo "The only accept parameter is hello"
fi

条件判断二:使用 case …esac 的方式
case 输入方式(string) in
输入方式一)
程序执行段
;;
输入方式二)
程序执行段
;;
*)
echo “Usage: {输入方式一|输入方式二}”
exit 1
esac

输入方式(string)的格式主要有两种:

1、直接输入:就是以“执行文件 + 字符串 ”的方式来执行的, 字符串可以直接写成 $1 (在执行文件后面直接加入参数的第一个参数)
2、交互式:就是由屏幕输出可能的项目,然后让使用者输入,这个通常必须配合 read variable 然后 string 则写成 $variable的格式!

直接输入方式:

[test @test test]# vi test09.sh
#!/bin/bash
echo "This program will print your selection!"
case $1 in
one)
echo "your choice is one"
;;
two)
echo "your choice is two"
;;
three)
echo "your choice is three"
;;
*)
echo "Usage {one|two|three}"
exit 1
esac

交互方式:

[root @test test]# vi test10.sh
#!/bin/bash
echo "Press your select one, two, three"
read number
case $number in
one)
echo "your choice is one"
;;
two)
echo "your choice is two"
;;
three)
echo "your choice is three"
;;
*)
echo "Usage {one|two|three}"
exit 1
esac

循环结构语句
①for (( 条件一; 条件二; 条件三 ))
②for variable in variable1 variable2 …..
③while [ condition1 ] && { || } [ condition2 ] …
④until [ condition1 ] && { || } [ condition2 ] …

[test @test test]# vi test11.sh
#!/bin/bash
# Using for and loop
#
declare -i s
for (( i=1; i<=100; i=i+1 ))
do
s=s+i
done
echo "The count is ==> $s"
[test @test test]# vi test12.sh
#!/bin/bash
# Using while and loop
#
declare -i i
declare -i s
while [ "$i" != "101" ]
do
s=s+i
i=i+1
done
echo "The count is ==> $s"
[test @test test]# vi test13.sh
#!/bin/bash
# Using until and loop
#
declare -i i
declare -i s
until [ "$i" = "101" ]
do
s=s+i
i=i+1
done
echo "The count is ==> $s"
[test @test test]# vi test14.sh
#!/bin/bash
# using for...do ....done
#
LIST="Tomy Jony Mary Geoge"
for i in $LIST
do
echo $i
done
[test @test test]# vi test15.sh
#!/bin/bash
# Using for and loop to read the account of this li
nux server!
#
account=`cut -d ":" -f1 /etc/passwd | sort`
echo "The following is your linux server's accoun
t"
for i in $account
do
echo $i
done
[test @test test]# vi test16.sh
#!/bin/bash
# Using until
#
echo "Press Y/y to stop"
until [ "$yn" = "Y" ] || [ "$yn" = "y" ]
do
read yn
done
echo "Stop here"

综合示例:逻辑判断式
①先查看一下 /root/test/logical 这个名称是否存在;
②若不存在,则建立一个文件,使用 touch 来建立(建立的
是0字节的一个文件),建立完成后离开;
③如果存在的话,判断该名称是否为文件,若为文件则将之
删除后建立一个目录,目录名为 logical ,之后离开;
④如果存在的话,而且该名称为目录,则移除此目录!
⑤[test @test test]# vi logical.sh

#!/bin/bash
if [ ! -e logical ]; then
touch logical
echo "Just make a file logical"
exit 1
elif [ -e logical ] && [ -f logical ]; then
rm logical
mkdir logical
echo "remove file ==> logical"
echo "and make directory logical"
exit 1
elif [ -e logical ] && [ -d logical ]; then
rm -rf logical
echo "remove directory ==> logical"
exit 1
else
echo "Does here have anything?"
fi

综合示例:显示主机上的端口是否开启
[test @test test]# vi port.sh
主要代码:

ssh=`netstat -an|grep LISTEN|grep :22`
if [ "$ssh" != "" ]; then
echo "SSH is running"
else
echo "SSH is NOT running"
fi

四、linux中性能常用命令

• 说明:此部分内容大家可以看下我在第二次
视频讲解内容
• Iotop、netstat、lsof、iftop
• 。。。。。

五、sed和awk用法

sed
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。
sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所
以不会修改原文件

Sed 语法格式
sed命令行格式为:
sed [常用选项] ‘常用命令’ 输入文本
• 常用选项:
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都
会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动
作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的
sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。
• 常用命令:
a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)

c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)

p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法
!例如 1,20s/xiaoming/xiaowang/g 就是啦!
Sed 检索文件

Sed –n ’10 p’ data.csv 输出第十行文件内容Sed –n ‘99990,100000 p’ data.csv 输出99990到100000文件内容Sed –n ‘99990, $ p ’ data.csv 输出99990到文件末尾内容Sed –n ‘/xiaoming0/,/xiaoming10/ p’ data.csv 输出包含xiaoming0到
xiaoming10之间内容
• Sed –n ‘/^xiaoming p/’ data.csv ^表示文件开头
• sed ‘/xiaoming/!p’ data.csv 显示不含有xiaoming的行
• sed -n ‘/[^ xiaoming]/p’ data.csv 效果同上Sed ‘/^$/p’ data.csv 匹配文件空行
• /^.*$/  整行

Sed删除文件内容

• sed '10 d' aa.txt
• sed '10,$ d' aa.txt
• sed '10~20 d' aa.txt
• sed '/123/ d' aa.txt
• sed '/123/,$ d' aa.txt

Sed 替换文件

• [root@forest sh]# more data.csv100012  小明0  xiaoming0  1234567890  11111111111111110  杭州  0  0100013  小明1  xiaoming1  1234567891  11111111111111111  杭州  1  1100014  小明2  xiaoming2  1234567892  11111111111111112  杭州  2  2100015  小明3  xiaoming3  1234567893  11111111111111113  杭州  3  3100016  小明4  xiaoming4  1234567894  11111111111111114  杭州  4  4100017  小明5  xiaoming5  1234567895  11111111111111115  杭州  5  5100018  小明6  xiaoming6  1234567896  11111111111111116  杭州  6  6100019  小明7  xiaoming7  1234567897  11111111111111117  杭州  7  7100020  小明8  xiaoming8  1234567898  11111111111111118  杭州  8  8100021  小明9  xiaoming9  1234567899  11111111111111119  杭州  9  9100022  小明10  xiaoming10  12345678910  111111111111111110  杭州  10  10
• [root@forest sh]# sed -i's/\t/,/g' data.csv
• [root@forest sh]# more data.csv100012,小明0,xiaoming0,1234567890,11111111111111110,杭州,0,0100013,小明1,xiaoming1,1234567891,11111111111111111,杭州,1,1100014,小明2,xiaoming2,1234567892,11111111111111112,杭州,2,2100015,小明3,xiaoming3,1234567893,11111111111111113,杭州,3,3100016,小明4,xiaoming4,1234567894,11111111111111114,杭州,4,4100017,小明5,xiaoming5,1234567895,11111111111111115,杭州,5,5100018,小明6,xiaoming6,1234567896,11111111111111116,杭州,6,6100019,小明7,xiaoming7,1234567897,11111111111111117,杭州,7,7100020,小明8,xiaoming8,1234567898,11111111111111118,杭州,8,8100021,小明9,xiaoming9,1234567899,11111111111111119,杭州,9,9100022,小明10,xiaoming10,12345678910,111111111111111110,杭州,10,10

Sed 文件添加内容

• sed '$a insert one line data' data.csv200003,小明99991,xiaoming99991,12345678999991,111111111111111199991,杭州,255,65535200004,小明99992,xiaoming99992,12345678999992,111111111111111199992,杭州,255,65535200005,小明99993,xiaoming99993,12345678999993,111111111111111199993,杭州,255,65535200006,小明99994,xiaoming99994,12345678999994,111111111111111199994,杭州,255,65535200007,小明99995,xiaoming99995,12345678999995,111111111111111199995,杭州,255,65535200008,小明99996,xiaoming99996,12345678999996,111111111111111199996,杭州,255,65535200009,小明99997,xiaoming99997,12345678999997,111111111111111199997,杭州,255,65535200010,小明99998,xiaoming99998,12345678999998,111111111111111199998,杭州,255,65535200011,小明99999,xiaoming99999,12345678999999,111111111111111199999,杭州,255,65535
• insert one line data

• 相当于 echo “insert one line data” >> data.csv 文件尾部追加内容

  AWK
• awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理
如何执行awk
• 在LINUX的命令行上键入诸如下列格式的指令: ( “ Shell) awk ‘awk程序’ 数据文件文件名
• 则awk会先编译该程序, 然后执行该程序来处理所指定的数据文件.
• (上列方式系直接把程序写在LINUX的命令行上)
• awk 程序的主要结构:
• awk程序中主要语法是 Pattern { Actions}, 故常见之awk 程序其型态
如下 :
• Pattern1 { Actions1 }
• Pattern2 { Actions2 }
• ……
• Pattern3 { Actions3 }
• Pattern 是什么 ?
• awk 可接受许多不同型态的 Pattern. 一般常使用 “关系表
达式”(Relational expression) 来当成 Pattern.
• 关系运算符(Relational Operators)
• >, <, >=, <=, ==, !=
• ~ (match) 及 !~(not match)
• 例如
• X > 10,X==Y
• “banana” ~ /an/
Actions 是什么?
• Actions 是由许多awk指令构成. 而awk的指令与 C 语言中的指令十分类似.
• 例如 :
• awk的 I/O指令 : print, printf( ), getline…
• awk的 流程控制指令 : if(…){..} else{..}, while(…){…}…
awk 如何处理 Pattern { Actions } ?
• awk 会先判断(Evaluate) 该 Pattern 的值, 若 Pattern 判断后的值为true (或不
为0的数字,或不是空的字符串), 则 awk将执行该 Pattern 所对应的 Actions.反
之, 若 Pattern 之值不为 true, 则awk将不执行该 Pattern所对应的 Actions.
例如 : 若awk程序中有下列两指令
• 50 > 23 {print “Hello! The word!!” }
• “banana” ~ /123/ { print “Good morning !” }
• awk会先判断 50 >23 是否成立. 因为该式成立, 所以awk将印出”Hello! The
word!!”. 而另一 Pattern 为 “banana” ~/123/, 因为”banana” 内未含有任何子字
符串可 match /123/, 该 Pattern 之值为false, 故awk将不会印出”Good
morning !”
• awk 的字段变量
• awk 所内建的字段变量及其含义如下 :
这里写图片描述
• awk 的内建变量(Built-in Variables)
• awk 提供了许多内建变量, 使用者于程序中可使用这些变量来取得相
关信息.常见的内建变量有 :
这里写图片描述
• 例如:awk 从文件 data.csv 中读入第一笔数据行
• 100012 小明0 xiaoming0 1234567890 11111111111111110 杭州 0 0
• 读取之后,程序中,

$0 之值将是
• $1 之值为
• $2 之值为
• $3 之值为
• $4 之值为
• $NF 之值为 8$NR 之值为 1$FILENAME 之值为

Awk工作流程
执行awk时, 它会反复进行下列四步骤:
1、自动从指定的数据文件中读取一个数据行.
2、自动更新(Update)相关的内建变量之值. 如 : NF, NR,
$0…
3、依次执行程序中 所有 的 Pattern { Actions } 指令.
4、当执行完程序中所有 Pattern { Actions } 时, 若数据文件
中还有未读取的数据, 则反复执行步骤1到步骤4.
awk会自动重复进行上述4个步骤, 使用者不须于程序中编
写这个循环 (Loop).

Awk字段变量使用

• awk -F\, '{print $1}' data.csv
• awk -F\, '{print $1,$2}' data.csv
• awk -F\, '{print $1" "$2}' data.csv
• awk -F\, ‘/99999/{print $0}’ data.csv等同于awk -F\, '$0~/99999/{print $0}'
data.csv
• awk -F\, '$1 ~ /999/{print $0}' data.csv
• awk -F\, '$1 !~ /999/{print $0}' data.csv
• 检索java进程PID
• ps -ef | grep java | grep -v grep |awk '{print $2}'

Awk内建变量使用

FS #改变字段切割的方式
awk 'BEGIN{FS="[,]";print "begin read file........"}{print $1,$2}END{print
"file read done"}' data.csv
BEGIN和END只执行一次
NR # awk已读入的数据行数目
NF #文件列总数
awk 'BEGIN{FS="[,]";print "begin read file........"}NR>99990{print
NR,NF,$1,$2}END{print "file read done"}' data.csv

Awk赋值、运算、比较
• 算术运算

awk 'BEGIN{FS="[,]";print "begin read
file........";i=0}NR>99990{i+=1;print
NR,NF+i,$1,$2}END{print "file read done"}' data.csv
i=0; 在BEGIN语句中赋值,初始化
i+=1;运算操作,等同于i=i+1;
NR>99990;比较运算
awk 'BEGIN{FS="[,]";print "begin read
file........";i=0}NR>99990&&$1>=200006{i+=1;print
NR,NF+i,$1,$2}END{print "file read done"}' data.csv

• 比较运算符:&& || != 与/或/不等于

Awk条件判

• If else
• awk 'BEGIN{FS="[,]";print "begin read
file........";i=0}{if(NR>99990||$1>=200006){i
+=1;print NR,NF+i,$1,$2} else {print
"NR<=99990||$1>=200006"}}END{print
"file read done"}' data.csvwk循环

• For循环
• awk '
• BEGIN{
• X[1]= 50; X[2]= 60; X["last"]= 70
• for( any in X )
• printf("X[%s] = %d\n", any, X[any] )
• }‘
• awk 'BEGIN{
for(k in ENVIRON)
{
print k"="ENVIRON[k];
}
}'
• While循环
• awk 'BEGIN{
total=0;
i=0;
do
{
total+=i;
i++;
}while(i<=100)
print total;
}'
• [root@tomcat099 sh]# cat data.dat
• 2000000001
2000000002
2000000003
2000000004
2000000005
2000000006
2000000007
2000000008
2000000009
• [root@tomcat099 sh]# sed '2,${s/^[0-9]/3/g}' data.dat
2000000001
3000000002
3000000003
3000000004
3000000005
3000000006
3000000007
3000000008
3000000009
• redis命中率:
• echo -ne "hits\tmiss\thit rate\n" >>aa.txt ;while true; do /usr/local/redis-
2.8.7/src/redis-cli info | awk -F':'
'/keyspace_hits/{hits=$2}/keyspace_misses/{printf "%5d %5d %.2f\n",
hits,$2,(hits/(hits+$2))*100}';sleep 2;done >> aa.txt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值