awk之四

1 篇文章 0 订阅

一 根据时间格式往前减少8个小时,并原样输出:

[root@localhost ~]# cat hhh.txt  #后面不是空格键是tab键
2019/7/8 3:00    8
2019/7/8 17:00    216
2019/7/8 18:00    95
2019/7/8 19:00    166
2019/7/8 20:00    80
2019/7/8 21:00    128
2019/7/8 22:00    482
2019/7/8 23:00    126
2019/7/9 0:00    40
2019/7/9 1:00    154
2019/7/9 2:00    213
2019/7/9 3:00    205
2019/7/9 4:00    152
2019/7/9 17:00    45
2019/7/9 18:00    263
2019/7/9 19:00    198
2019/7/9 20:00    3
2019/7/9 21:00    208
2019/7/9 22:00    234
2019/7/9 23:00    30
2019/7/10 0:00    105
2019/7/10 1:00    51
2019/7/10 2:00    27
2019/7/10 4:00    14
2019/7/10 5:00    2
2019/7/10 6:00    107
2019/7/10 7:00    6
2019/7/10 16:00    63
2019/7/10 17:00    253
2019/7/10 18:00    231
2019/7/10 19:00    25
2019/7/10 20:00    8
2019/7/10 21:00    274
2019/7/10 22:00    223
2019/7/10 23:00    36
2019/7/11 0:00    268
2019/7/11 1:00    113
2019/7/11 17:00    80
2019/7/11 18:00    61
2019/7/11 19:00    8
2019/7/11 12:00    15
2019/7/11 13:00    29
2019/7/11 15:00    25
2019/7/11 15:00    328
2019/7/11 16:00    10
2019/7/11 17:00    168
2019/7/11 18:00    231
2019/7/11 19:00    354
2019/7/11 22:00    143
2019/7/11 23:00    1
2019/7/12 8:00    2
2019/7/12 9:00    109

#定义分隔符和将输出分隔符为空,再采取将字段拼接的方式组合出来

awk的if else:awk '{if (表达式){结论} else(表达式){结论}}' 文件名

[root@localhost ~]# sed 's/\t//g' hhh.txt |awk -v  OFS=''    -F '[ :/]+'  '{if($4>=8){$4=$4-8;print $1"/"$2"/"$3" "$4":"$5}else{$3=$3-1;$4=$4+24-8;print $1"/"$2"/"$3" "$4":"$5}}'
2019/7/7 19:008
2019/7/8 9:00216
2019/7/8 10:0095
2019/7/8 11:00166
2019/7/8 12:0080
2019/7/8 13:00128
2019/7/8 14:00482
2019/7/8 15:00126
2019/7/8 16:0040
2019/7/8 17:00154
2019/7/8 18:00213
2019/7/8 19:00205
2019/7/8 20:00152
2019/7/9 9:0045
2019/7/9 10:00263
2019/7/9 11:00198
2019/7/9 12:003
2019/7/9 13:00208
2019/7/9 14:00234
2019/7/9 15:0030
2019/7/9 16:00105
2019/7/9 17:0051
2019/7/9 18:0027
2019/7/9 20:0014
2019/7/9 21:002
2019/7/9 22:00107
2019/7/9 23:006
2019/7/10 8:0063
2019/7/10 9:00253
2019/7/10 10:00231
2019/7/10 11:0025
2019/7/10 12:008
2019/7/10 13:00274
2019/7/10 14:00223
2019/7/10 15:0036
2019/7/10 16:00268
2019/7/10 17:00113
2019/7/11 9:0080
2019/7/11 10:0061
2019/7/11 11:008
2019/7/11 4:0015
2019/7/11 5:0029
2019/7/11 7:0025
2019/7/11 7:00328
2019/7/11 8:0010
2019/7/11 9:00168
2019/7/11 10:00231
2019/7/11 11:00354
2019/7/11 14:00143
2019/7/11 15:001
2019/7/12 0:002
2019/7/12 1:00109

将上面的命令做个筛选

#剔除含有中英文的行再处理数据
 awk '/[!-~]/' $filename|grep -v '[a-zA-Z]'|sed -e 's/\t//g'  |awk -v OFS='' -F '[ :/]+' '{if($4>=8){$4=$4-8;print $1"/"$2"/"$3" "$4":"$5}else{$3=$3-1;$4=$4+24-8;print $1"/"$2"/"$3" "$4":"$5}}'

#awk中使用 if  .... else if的结构

awk -F '[ :]+' 'BEGIN{ myday=strftime("%Y-%m-%d", systime());print myday;myhour=strftime("%H",systime());print myhour}{if($6 < myday && $9 !~ "inprogress" )print $6,$7,$9;else if ( $9 !~ "inprogress" && $7< myhour-6 ) print $6,$7,$9}'  file.txt

#多文件操作

#将文件show.txt的第二列替换result-new.sql的第三列
awk 'FNR==NR{a[NR]=$2;next}{$3=a[FNR]}1' show.txt result-new.sql >>final.sql

#使用将a.txt文件的第二列合并到b.txt文件

[cbiadmin@peklpcbipo1 tmp]$ awk -F ',' 'NR==FNR{a[NR]=$2;next}{$2=a[FNR]" "$2}{print $0}' a.txt b.txt
1 a-1 b-1
2 a-2 b-2
3 a-3 b-3
4 a-4 b-4

二 将一个文件里面符号两个条件中的一个挑出来,也就是 【 或】

#下面是选出$6日期在15天以前的,【或】者 $6 里面含有 progress字符串的内容

awk 'BEGIN{ days_ago=strftime("%Y-%m-%d", systime()-15*24*3600) }{ if($6< days_ago || $6 ~ "progress"){printf "%s\t%s\n", $6,$8} }'

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值