sed复制剪切功能与awk
来源:互联网 发布:企业 大数据战略 编辑:程序博客网 时间:2024/05/16 15:45
模式空间 存储sed处理的行
不存储行
被sed 拷贝模式空间里行,被动作处理完后会,自动输出
保持空间 默认只存储一个换行符号 \n
存放在保持空间的行,不会被sed处理
也不会输出
只有存储数据的功能
模式空间 —— > 保持空间
h 覆盖
H 追加
保持空间 ——- > 模式空间
g 覆盖
G 追加
1h
sed剪切 把文件中的第一行和第二行剪切到文件的末尾
sed ‘1h;2H;1,2d;$G’ a.txt
1d
1,3d
1d;3d;5d
/[0-9]/d
执行动作时条件的其他表示方式
/正则表达式/,/正则表达式/动作
/正则表达式/,num动作
sed ‘1,3d’ a.txt
sed ‘1,/sync/d’ a.txt
sed ‘/bin/,5d’ a.txt当起始位置为正则表达式时,无视结束为止,乱删除,难以控制
sed ‘/a/,/w/d’ a.txt
11111111111111111
xxxxxxxxxxxxxxxxx
aaaaa
11111111111
88888888888
wwwwwwwwwww
11111111111111111
xxxxxxxxxxxxxxxxx
aaaaa
11111111111
88888888888
n,+m动作 从第n行开始删,再删m行
$2,+4d
[root@sql-20 ~]# cat del2lines.sh#!/bin/bashsum_lines=`cat $1 | wc -l`s_line=`expr $sum_lines - 1`sed -i ''$s_line',+1d' $1 #引用变量要使用单引号
n~m动作 读够m行 删除读进来的第n行
1~2d
n,~m动作 从第n行开始删,删到行号是数字m的整数倍间的行为止
3,~2d
/v/,~2d
使用awk
awk 是什么 ? 编程语言 (变量 函数 流程控制 数组 语法格式)
单独使用 ,主要用来对数据做统计
1 统计网站服务器当天的访问量
2 当天9:00~12:00访问量
3 把当前系统1小时内,cpu使用率最高前5进程 的进程名输出
用在shell脚本里,使用awk获取数据给shell程序处理
[root@sql-20 ~]# which awk
/usr/bin/awk
[root@sql-20 ~]# rpm -q gawk
gawk-3.1.7-10.el6.x86_64
[root@sql-20 ~]#
awk用法
awk ‘{动作}’ 文件列表
命令 | awk ‘{动作}’
awk 【选项】 ‘条件{动作}’ 文件列表
命令 | awk 【选项】 ‘条件{动作}’
awk如何处理数据?
以行为处理单位 逐行处理 一次处理一行 处理完当前行自动处理下一行
默认把处理结果输出的屏幕上
awk 变量 (自定义变量 、 内置变量 、 使用shell变量(自定义、环境变量))
awk自定义变量 : 变量名=值
变量名
awk ‘{ sex=”gril” ; print sex }’ a.txt
awk ‘{ sex=”gril” ; print “she is “sex }’ a.txt
awk ‘{ age=23 ; print age }’ a.txt
选项
-F 设置字段分隔符 head -2 /etc/passwd | awk -F “:” ‘{print
内置变量
$N
ENVIRON 数组类型内置变量
系统环境变量名:
awk ‘{print ENVIRON[“USER”]}’ a.txt使用索引数组调用系统变量
awk执行过程中调用shell变量:
name=jim age=10
awk -v x=
[root@sql-20 ~]# echo
pc205.tarena.com root
[root@sql-20 ~]# awk -v x=
pc205.tarena.com root
pc205.tarena.com root
三 、 awk 执行顺序
BEGIN{ 处理动作 } 行前处理 awk没有读入行之前执行的处理
作用:对数据做初始化
awk 'BEGIN{FS=":"}{print $1}' /etc/passwdhead -3 /etc/passwd | awk '{i=0;i++;print i}'head -3 /etc/passwd | awk 'BEGIN{i=0}{i++;print i}'head -3 /etc/passwd | awk 'BEGIN{i=0}{i++}END{print i}'
{ 处理动作 } 行处理 awk 读入行之后执行的处理
作用:对读入的行做处理
多个处理动作使用; 间隔
{i++;print
END{ 处理动作 }行后处理 awk 读完所有行之后执行的处理
作用 : 做总结性输出
user shell
root /bin/bash
bin /bin/bash
daemon /bin/bash
head -3 /etc/passwd | awk -F “:” ‘BEGIN{print “user\tshell”}{print
head -3 /etc/passwd | awk -F “:” ‘{print
awk 算数运算符:
+ - * / %
++ –
+= -= *= /=
awk ‘BEGIN{print 1+1}’
awk ‘BEGIN{print 1*1}’
awk ‘BEGIN{print 1/1}’
awk ‘BEGIN{print 1%1}’
awk ‘BEGIN{print i%j}’
awk ‘BEGIN{i=10;j=2;print i%j}’
awk ‘BEGIN{i=10;i++;print i}’
awk ‘BEGIN{i=10;i++;print i;i++}’
awk ‘BEGIN{i=10;i++;print i;i++;print i}’
awk ‘BEGIN{i=10;i++;i++;print i}’
awk ‘BEGIN{i=10;i+=3;print i}’
awk ‘BEGIN{i=10;i+=3;i+=3print i}’
awk ‘BEGIN{i=10;i+=3;i+=3;print i}’
awk ‘BEGIN{i=0}{i++}END{print “system user is “i}’ /etc/passwd
awk ‘BEGIN{i=0}{i++}END{print “system user is “i}’ /etc/passwd
四、awk的处理条件
awk 选项 ‘条件{处理动作}’ 文件名
条件表示方式
数值比较 num1 比较符 num2
等于 不等于 大于 大于等于 小于 小于等于
== != > >= < <=
awk -F “:” ‘{x++}
awk -F “:” ‘{ }{ }{ }END{ }’ /etc/passwd
字符比较
“string1” 比较符 “string2”
等于 不等于
== !=
awk -F ":" '$7!="/sbin/nologin"{print $0}' /etc/passwdawk -F ":" '$1=="root"{print $0}' /etc/passwd
正则表达式匹配
值 比较符 /正则表达式/
匹配 ~
不匹配 !~
awk -F “:” ‘
逻辑比较 (多个判断条件时,使用逻辑比较)
逻辑与 && 多个条件必须同时成立 条件1 && 条件2 && 条件3
逻辑或 || 多个条件某一个条件成立就可以 条件1 || 条件2 || 条件3
逻辑非 ! 取反
== ~
!= !~
[root@sql-20 ~]# awk -F “:” ‘1=="root" &&3==30 && 7=="/bin/bash"{print1,
[root@sql-20 ~]#
[root@sql-20 ~]# awk -F “:” ‘1=="root" &&3==0 && 7=="/bin/bash"{print1,
[root@sql-20 ~]#
awk -F “:” ‘
五、awk数组
定义数组
数组名[下标]=值 ip[2]=100;ip[1]=200
数组名[“下标”]=”值” tea[“tea1”]=”jim”
使用数组元素 : 数组名[下标]
输出数组元素的值 : print 数组名[下标]
awk ‘BEGIN{student[“name”]=”jim”;student[“sex”]=”girl”;print student[“sex”]}’
awk ‘BEGIN{grupnum[3]=1020;print grupnum[3]}’
[root@sql-20 ~]# awk ‘BEGIN{grupnum[3]=1020;print grupnum[0],grupnum[3]}’
head -3 /etc/passwd | awk -F “:” ‘{sysuser[
head -3 /etc/passwd | awk -F “:” ‘{sysuser[
1
统计 a.txt 文件 相同用户名出现的次数
[root@sql-20 ~]# grep bin a.txt –color
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:daemon:/sbin:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:daemon:/sbin:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:daemon:/sbin:/bin/bash
root 3 i
bin 4 j
daemon 3 x
awk ‘BEGIN{FS=”:”;i=0;j=0;x=0}
数组名[下标]=值
数组名[下标]++
user[3]=10
head -1 b.txt | awk ‘{usergrp[“name”]++}’
usergrp[“name”]=usergrp[“name”]+1
2、备份数据库服务器上每天新生成的binlog日志(备份过的不备份),备份时,不备份正在使用binlog日志, 备份的binlog日志存放的/baklogdir目录里,备份binlog 日志 和名不变。
vim newbakbinlog.sh#!/bin/bashdatadir=/var/lib/mysqlbakdir=/baklogdirif [ ! -e $bakdir ];then mkdir $bakdirfifor file in `sed '$d' $datadir/plj.index`do binlogname=`echo $file | awk -F "/" '{print $2}'` if [ ! -e $bakdir/$binlogname ];then cd $datadir cp $binlogname $bakdir/ fidone00 18 * * * newbakbinlog.sh
3统计系统内建用户数 统计系统外建用户数
统计不能登录系统的用户数
awk -F '$7=="/sbin/nologin" { i++ }END{print i}' /etc/passwd
输出文件中的偶数行 输出文件中的奇数行
awk 'FNR%2==0{print FNR,$0}' a.txt
输出数字57到93之间 有7或是7的整数倍的数。
seq 57 93 | awk '$0 ~ /7/ || $0%7==0 {print $0}'
awk -F “:” ‘{user[$1]++}END{print user[“tom”]}’ b.txt
统计 a.txt 文件 相同用户名出现的次数
[root@sql-20 ~]# grep bin a.txt –color
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:daemon:/sbin:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:daemon:/sbin:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:daemon:/sbin:/bin/bash
六 、awk流程控制
循环结构 for while do…while
for(赋初值;条件 ; 步长){ 循环体 }
awk ‘BEGIN{ for(i=1;i<=5;i++){print i} }’
awk ‘BEGIN{ for(i=1;i<=5;i++){ipgrp[i]=”jim”i} }’
awk ‘BEGIN{ for(i=1;i<=5;i++){ipgrp[i]=”jim”i} ; for(i=1;i<=5;i++){print ipgrp[i]} }’
遍历数组的for循环结构
for( 变量名 in 数组名){ 循环体 }随机赋值
usergrp[1]=”jim”;usergrp[2]=”tom”;usergrp[3]=”lucy”
awk ‘BEGIN{usergrp[1]=”jim”;usergrp[2]=”tom”;usergrp[3]=”lucy”; for(i in usergrp){print i} }’
awk ‘BEGIN{ for(i=1;i<=10;i++){usergrp[i]=”jim”i} ; for( j in usergrp){print j} }
awk -F “:” ‘{user[$1]++}END{ for( i in user){ print i,user[i]} }’ b.txt
while循环
while (条件){ 循环体 }
awk ‘BEGIN{ i=1 ;while( i <=5 ){ print i ;i++ } }’
awk ‘BEGIN{ i=1 ; while( i <=5 ){ipgrp[i]=”192.168.1.”i ;i++} }’
awk ‘BEGIN{ i=1 ; while( i <=5 ){ipgrp[i]=”192.168.1.”i ;i++} ; for( x in ipgrp){print ipgrp[x] } }’
do…while循环 (先执行循环体 再判断条件)
do{ 循环体 }while(条件)
awk ‘BEGIN{ i=1 ; while( i <=0 ){ print i ; i++ } }’
awk ‘BEGIN{ i=1 ; do { print i ; i++ }while( i <= 0 ) }’
选择结构 if
if(条件){ …… }
awk -F “:” ‘{ if(3>=500){ print3," "$0 }}’ /etc/passwd
if(条件){…….}else{…….}
awk -F “:” ‘{ if(3>=500){ print3," "0 }else{ print3} }’ /etc/passwd
if(条件1){…….}elif(条件2){…..}elif(条件N){…..}else{……}
awk -F “:” ‘{ if(
-f 调用文件对数据做处理
vim xxx.awk
!/usr/bin/awk
BEGIN{
FS=”:”;i=0;j=0
}
{
if( $1==”root” ){
print "user is admin"}else if($3>=500){ print $1," outside user"
}else if( $3==0){
print $1,"user is admin"
}else if(3 >=1 &&3<500){
print "inside user"
}else{
print “AAAAAAAAAAA”
}
}
:wq
awk -f xxx.awk /etc/passwd
awk ‘条件{ }’ /etc/passwd
awk流控函数
控制awk循环结构的执行
break 结束自己所在循环执行
continue 结束自己所在循环的本次循环,并开始下一次循环
[root@sql-20 ~]# awk ‘BEGIN{ for(i=1;i<=5;i++){ print i } }’
1
2
3
4
5
[root@sql-20 ~]# awk ‘BEGIN{ for(i=1;i<=5;i++){ if ( i==3 ){ break } ; print i }}’
1
2
[root@sql-20 ~]# awk ‘BEGIN{ for(i=1;i<=5;i++){ if ( i==3 ){ continue } ; print i} }’
1
2
4
5
[root@sql-20 ~]#
控制awk的执行
next 读取当前行的下一行
awk ‘FNR>=3 && FNR<=7{next}{print FNR,” ” 0}’ b.txt
awk ‘FNR>=3 || FNR<=7{next}{print FNR,” ”0}’ b.txt
exit 终止awk读入行
[root@sql-20 ~]# awk ‘FNR==3{exit}{print 0}’ b.txt
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/bin/bash
[root@sql-20 ~]#
[root@sql-20 ~]# awk ‘FNR==3{exit}{print0}END{print “over”}’ b.txt
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/bin/bash
over
[root@sql-20 ~]#
awk变量 awk处理顺序 awk处理数据时加条件 awk运算符
awk数组 awk流程控制(if for for…in while do…while)
使用awk文件对数据做处理 awk -f xxx.awk /etc/passwd
awk流程
循环结构执行的控制 break continue
awk读入行的控制 next exit
输出当前系统10秒内,cpu使用率最高的前5个进程的进程名和cpu使用率总和
!/bin/bash
for ((i=1;i<=10;i++))
do
ps -eo comm,pcpu | sed ‘1d’ >> /tmp/cpu2.txt
sleep 1
done
awk ‘{cpu[
shell 基础 正则表达式 sed awk
expect的使用
Expect是一个免费的编程语言
用来实现自动和交互式任务进行通信,而无需人的干预。通常用在Shell脚本中,获取指定的数据
用非交互的方式实现了所有交互式的功能.
yum -y install expect
spawn 触发交互式操作
expect “捕获什么内容” 捕获命令执行后的输出内容,捕获到想的内容为成功
send “发送的数据” expect捕获数据成功后,发送数据
自动上传文件到ftp服务器的本 (192.168.1.100 /var/ftp/pub目录下)
vim /shell/auto_file_put
!/usr/bin/expect
set ip “192.168.4.20”
set user “ftp”
set password “”
set path [lindex
spawn ftp 192.168.4.20
expect “:”
send “
expect “ftp>”
send “cd pub\n”
expect “ftp>”
send “lcd
expect “ftp>”
send “bye\n”
:wq
chmod +x /shell/auto_file_put
/shell/auto_file_put /tmp homework.txt
/shell/auto_file_put /mysqbak webdb.sql
pxe.sh
LAMP.sh
统计网站服务当天的访问量
把当前系统使用率最高的前10个命令输出并输出使用的总次数
- sed复制剪切功能与awk
- sed与awk常用功能
- sed与awk常用功能
- MAC 复制与剪切
- awk与sed
- sed与awk
- [linux]sed与awk
- awk与sed
- sed与awk
- Linux中的复制与剪切
- Sed与AWK入门教程之Sed篇
- Sed与AWK入门教程之Sed篇
- Sed与AWK入门教程之Sed篇
- Sed与AWK入门教程之Sed篇
- sed与awk读书笔记[sed篇]
- AWK SED 与 LINUX常用命令
- SED与AWK学习笔记
- sed与awk技巧备忘
- Java跨平台将word转为pdf(结合Jodconverter 和OpenOffice.org)
- ubuntu编译安装Opencv
- 利用信号量来调度共享资源 生产者-消费者问题
- 网络编程中inet_ntoa的一个典型误用
- openlayers cgi proxy跨域问题总结
- sed复制剪切功能与awk
- Android排错:has leaked window com.android.internal.policy.impl.PhoneWindow$ that was originally added
- 微信红包实现原理
- 安装 brew
- activiti表单设置节点的默认变量
- C++ mac&windows 获取程序运行根目录
- jQuery 获取当前节点的html包含当前节点的方法
- 分享45个android实例源码,很好很强大.收藏吧!!!
- StringBuilder和StringBuffer的区别