9.11-Linux中的date,cut,awk,awk编程

linux中的日期格式:
x:正数是多少单位以前,负数的时候多少单位以后
x hours ago
x days ago
x weeks ago
x months ago
x years ago


获取天:
获取时间戳:

echo `date -d "1 hours ago" "+%Y-%m-%d %H:%M:%S"`
echo `date -d "-1 hours ago" "+%Y-%m-%d %H:%M:%S"`
echo `date -d "1 weeks ago" "+%Y-%m-%d"`
echo `date -d "1 weeks ago" "+%d"`
echo `date -d "1 weeks ago" "+%m"`
echo `date -d "1 weeks ago" "+%s"`

模式:date [option]  "  定位某天( ....ago ) " "+时间的格式 "

定时任务列表:
crontab -e : 编辑当前用户的定时任务列表
crontab -e -u gj : -u指定编辑gj用户的定时任务列表
crontab -l : 查看当前用户的定时任务列表
crontab -l -u gj : 查看gj的定时任务列表
crontab -r : 删除当前用户的定时任务列表
crontab -r -u gj :删除gj的定时任务列表  (-i 给出确认删除提示)


*       *       *       *       * 可执行的脚本或者可执行的命令 信息处理
分      时      天      月      周

1,2,3   1-10/2

* : 任意单位
*/n : 每隔n个单位
1,2,3 :在1,2,3单位
1-10 : 1到10的连续单位
1-10/2 :1-10的连续单位每隔两个单位


30    02    *    *    *    /home/my.sh >> /home/my.log
*/1 *    *    *    *    /bin/echo "hello gp1813" >> /home/my.log
*/1 *    *    *    *    /home/my.sh >> /home/my.log

crontab -l -u root : 为root创建定时任务列表
crontab -l -u root : 查看root用户的定时任务列表
crontab -r -u root : 删除root的定时任务列表
crontab -e -u gj :给gj创建定时任务列表
crontab -r -u gj :删除gj定时任务列表
 


快照:在某一时刻给系统拍一张照片(某时刻系统镜像)
克隆:复制一台和另一台机子一模一样的服务器。
关键--->管理--->克隆--->下一步--->克隆当前状态--->创建完整克隆(修改名称和存储地方)

修改克隆机子的ip信息:
vi /etc/sysconfig/network-scripts/ifcfg-eth0   修改eth0网卡信息
vi /etc/sysconfig/network   修改的主机名
vi /etc/hosts  : 配置映射 
vi /etc/udev/rules.d/70-persistent-net

目的:
window能ping通克隆出来的每一台服务器
克隆出来的每一台机子和原来的需要能通信


作业:
案例1:面试题中的shell题
第一种方法:(rename 一定需要走到当前目录,否则错误)
rename .txt '' /home/shell/*.txt
第二种方法:(注意find不能用就换/bin/sh、注意执行脚本需要传参数)

 find $basedir -name '*.txt'

第三种方法:(采用循环mv的方式来做??较为麻烦)
#!/bin/bash

basedir=/home/shell
for i in ` ls *.txt`
do
finalname=`basename $i .txt`
mv ${dir}$i ${basedir}/$finalname  #遇见相同名不会修改
done


案例2:(每天凌晨2点10分定时删除一周前的日志文件)
日志格式为:
touch 2018-09-01.log
touch 2018-09-02.log
touch 2018-09-03.log
touch 2018-09-04.log
touch 2018-09-05.log
touch 2018-09-06.log
touch 2018-09-07.log
touch 2018-09-08.log

#!/bin/bash


#获取今天以前七天的时间戳
weekagoTimeStamp=`date -d "1 weeks ago" "+%s"`
basedir=/home/log
for i in `ls $basedir`
do
nowdate=`basename $i .log`
logTimeStamp=`date -d "$nowdate" "+%s"`
if [ $logTimeStamp -lt $weekagoTimeStamp ]
then
echo $i
rm -rf $basedir/$i
fi
done


awk : linux中三把斧头之一,grep主要用于过滤,sed主要用于流编辑,awk主要用于数据分析。

awk常见pattern:
awk -F "" 'BEGIN{} {}... END{}'
awk -F "" '{}... END{}'
awk -F "" '{}...'

-F : 后面是指定列的分割符,默认的域分隔符是空格


awk的常见用法:
1、直接在linux控制中使用命令
数据源 | awk -F "" 'BEGIN{} {}... END{}'
awk -F "" 'BEGIN{} {}... END{}' 数据路径
2、将awk语句嵌套在shell脚本中运行 ,sh ./first.sh
3、直接使用awk调用脚本 awk -f ./first.awk


常见操作:
cat /etc/passwd | awk -F ":" '{if($3>=500) print $0}' 输出整行


cat /etc/passwd | awk -F ":" '{print $1,$3,$4}' 指定输出域


cat /etc/passwd | awk -F ":" '{if($1=="root") print $1,$3,$4}' : 第一个字段等root的行


cat /etc/passwd | awk -F ":" 'BEGIN{print "uname\tuid\tgid"} {if($3>=500) print $1"\t"$3"\t"$4}'  : 指定begin,仅执行一次

cat /etc/passwd | awk -F ":" 'BEGIN{print "uname\tuid\tgid"} {if($3>=500) print $1"\t"$3"\t"$4} END{print "all data proccessed finished"}'  : 指定end,仅执行一次,仅执行一次


cat /etc/passwd | awk -F ":" '{if($1 ~ /^root/) print $1,$3,$4}' : 正则匹配 $n ~ /正则表达式/ 

cat /etc/passwd | awk -F ":" '{if($1=="root") print $1,$3,$4}'  : 精确匹配


条件表达式:> < = != 等


作业:
zs1    68    99    33
zs2    78    90    70
zs3    88    78    99
zs4    58    90    69
zs5    18    66    66
1、查找出不及格的学生(有任何一科不及格为不及格)

awk -F "\t" '{if($2<60 || $3 < 60 || $4 < 60) print $0}'

2、计算出每一个科目平均分?
3、计算出每一个学生的平均分?

#!/bin/awk -f
BEGIN{
    math=0
    engish=0
    chinese=0
    print "name\tmath\tenglish\tchinese\tstu_avg\n"
   # print "------------------------------------------"
}
{
    math+=$2
    english+=$3
    chinese+=$4
    print $1"\t"$2"\t"$3"\t"$4"\t"($2+$3+$4)/NF
}
END{
    #  print "------------------print avg------------------"
   printf "o_avg:%6.2f%8.2f%8.2f\n",math/NR,english/NR,chinese/NR
}

 执行:awk -f  avg.awk score.txt 

模式:awk -f awk脚本  需要操作的文件

4、计算出平均分数落在分段数的人数及比例?

awk -F "\t" '
BEGIN{
ltFifty=0
gtFiftyltSixty=0
gtSixtyltNinty=0
gtNintyltHun=0
}

{
if(($2+$3+$4)/(NF-1) < 50){
ltFifty++
} else if(($2+$3+$4)/(NF-1) < 60){
gtFiftyltSixty++
} else if(($2+$3+$4)/(NF-1) < 90){
gtSixtyltNinty++
} else if(($2+$3+$4)/(NF-1) <= 100){
gtNintyltHun++
}
}

END{
print "0-50",ltFifty,(ltFifty/NR)*100"%"
print "50-60",gtFiftyltSixty,(gtFiftyltSixty/NR)*100"%"
print "60-90",gtSixtyltNinty,(gtSixtyltNinty/NR)*100"%"
print "90-100",gtNintyltHun,(gtNintyltHun/NR)*100"%"
}
'

这是命令,不是awk脚本,可以直接执行命令,也可以把主要内容写在awk脚本里,用awk -f  ---执行即可。

awk的内置变量:
NR :获取文件的行数
NF : 获取每行的字段数
FS : 输入数据域分割符
OFS :输出数据的字段分隔符
ORS : 输出记录的字段分隔符
ARGC : 命令行的参数个数


awk 'BEGIN{ FS=":";OFS="=" } {print $1,$3}' /etc/passwd

awk中的条件语句:
if(){
}

awk中的for循环:类似c
awk -F ":" 'BEGIN{count=0} {name[count]=$1;count++} END{for(i=0;i<NR;i++) print i,name[i]}' /etc/passwd


使用awk统计词频:
awk -F " " '{for(i=1;i<=NF;i++) arr[$i]++} END{for(word in arr) print word,arr[word]}' /home/words

awk的格式化输出:
printf("is is d%",NF)

编写自动化脚本?
执行某一个脚本,将所有你指定的服务器的jdk安装好 scp 、 ssh 、 expect

 

网络配置:
防火墙:控制主机是否能"出、入"

配置文件
/etc/sysconfig/iptables

查看防火规则:
iptables -L

插入一条防火规则:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT 允许80端
iptables -A INPUT -p tcp --dport 80 -j DROP   拒绝80

保存防火规则:
iptables-save

 查看端口:
 netstat -nltcp | grep 80
 netstat -nludp
 lsof -i:80  : 列出端口80
 
 route:
 route 查看路由
 route add ...
 route del ...
 
 
 cut: 
cut -b 1 /etc/passwd
cut -c 1 /etc/passwd
cut -d ":" -f 1,3,4 /etc/passwd >> /home/data
 

 sed:linux的流式编辑器
 增、删、改、查、替换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值