一 根据时间格式往前减少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} }'