awk 实用案例介绍
awk 简介
从文件输入
- [root@desktop243 Desktop]# gawk -F: '/student/{print $3}' /etc/passwd
- #-F:以":"号为分隔符分割出参数
- [root@desktop243 Desktop]# gawk -F: '/student/{print $1,$3}' /etc/passwd
- student
- [root@desktop243 Desktop]# gawk -F: '/student/{print $0}' /etc/passwd
- student:x::::/home/student:/bin/bash
awk 工作原理
- [root@desktop243 Desktop]# vim names
- Tome Savage
- Molly Lee
- John Doe
- cut 无法识别空格键和<Tab>打出来的空格
- [root@desktop243 Desktop]# cat names | cut -d ' ' -f
- Tome
- Molly Lee
- John
- [root@desktop243 Desktop]# cat names | cut -d ' ' -f
- Savage
- Doe
- gawk能区分空格键和<Tab>打出来的空格,“,”是代表打印时$ 和$ 之间有空格
- [root@desktop243 Desktop]# gawk '{ print $1,$3}' names
- Tome
- Molly
- John


- OFS,输出字段分隔符定义为两个制表符,“,”在输出时被制表符替换
- [root@desktop243 Desktop]# gawk '{ OFS="\t\t";print $1,$3}' names
- Tome
- Molly
- John
从命令输入
- [root@desktop243 Desktop]# df | gawk '$3 > 100'
- Filesystem 1K-blocks Used AvailableUse% Mounted on
- % /
- tmpfs % /dev/shm
- /dev/sda1 % /boot
- % /home
格式化输出 print 函数
- [root@desktop243 Desktop]# date
- Sat Oct :: CST
- [root@desktop243 Desktop]# date | gawk '{print "Month: "$2"\nYear:",$6}'
- Month: Oct
- Year:
OFMT 变量
- 模拟分区大小的转换,保留小数点后 位:
- [root@desktop243Desktop]#echo -e "/dev/sda1\t1234325\n/dev/sda3\t2209"\
- > | gawk '{OFMT="%.2f";print $1":",$2/1024,"M"}'
- /dev/sda1: 1205.40 M
- /dev/sda3: 2.16 M
printf 函数转义字符
- [root@desktop243 Desktop]# cat names
- Tome Savage
- Molly Lee
- John Doe
- names 文件中第 列的第一个字符:-%c 字符
- [root@desktop243 Desktop]# gawk '{printf("The charcter is %c\n",$2)}' names
- The charcter is S
- The charcter is L
- The charcter is D
- names 文件中第 列的字符串:–%s 字符串
- [root@desktop243 Desktop]# gawk '{printf("The string is %s\n",$2)}' names
- The string is Savage
- The string is Lee
- The string is Doe
- 打印一个人的名字和年龄:–%d 十进制整数
- 规定好了是字符串或者整数,后面的变量就必须是与之匹配的类型,否则会出错。
- [root@desktop243 Desktop]# echo "yangwawa 10"|gawk \
- > '{printf("%s is %d years old.\n",$1,$2)}'
- yangwawa is years old.
- [root@desktop243 Desktop]# echo "yangwawa 10 155"|gawk\
- > '{printf("%s is %d years old,his heigth si %.2fm.\n",$1,$2,$3/100)}'
- yangwawa is years old,his heigth si 1.55m.
printf 函数修饰符
- [root@desktop243 Desktop]# echo "Bluefox" | gawk '{printf("Welcome to \
- > |%s| lab\n",$1)}'
- Welcome to |Bluefox|lab
- [root@desktop243 Desktop]# echo "Bluefox" | gawk '{printf("Welcome to\
- > |%10s|lab\n",$1)}'
- Welcome to | Bluefox|lab
- [root@desktop243 Desktop]# echo "Bluefox" | gawk '{printf("Welcome to
- > |%-10s|lab\n",$1)}'
- Welcome to |Bluefox |lab
- [root@desktop243 Desktop]# gawk '{printf("%s\t\t%s\t\t%d\n",$1,$2,$3)}' \
- >names > name ;rm -f names ;mv name names
- [root@desktop243 Desktop]# cat names
- Tome Savage
- Molly Lee
- John Doe
文件中的 awk 命令
- 执行结果:
- [root@desktop243 Desktop]# cat names | gawk -f abc.awk
- ________--------________
- Nice to meet you -->Molly
- ________--------________
- ________--------________
- John
- 代码:
- [root@desktop243 Desktop]# cat abc.awk
- #!/bin/gawk
- /^[Mm]olly/{print "Nice to meet you -->"$}
- {print "________--------________"}
- $> {print $}
- 被测试的文件:
- [root@desktop243 Desktop]# cat names
- Tome Savage
- Molly Lee
- John Doe
- 分析:
- 程序开始后首先读到的$ 是 Tome Savage ,开始的字符既不是 M 也不是m, 后 面 的 {print "Nice to meet you -->"$}不 会 执 行 , 执 行 {print "________
- --------________"}后,判断 100 不大于 200,则 {print $1}不执行;接着$0 是 Molly
- Lee ,首字符串匹配,执行{print "Nice to meet you -->"$}的结果是
- Nice to meet you -->Molly,然后执行下一句,执行最后一句时发现 不大于 ,
- {print $}不执行;最后传给$0的是John Doe ,第一句由于不匹配而没有
- 执行,执行完第二句代码,最后 大于 ,所以执行{print $},结果是显示 John。
- #!/bin/gawk
- /^[Mm]olly/{print "Nice to meet you -->"$;\
- print "________--------________"}
- $> {print $}
- 再测试,结果:
- [root@desktop243 Desktop]# gawk -f abc.awk names
- Nice to meet you -->Molly
- ________--------________
- John
记录与字段
- 默认:
- [root@desktop243 Desktop]# gawk '{print $1,$2}' names
- Tome Savage
- Molly Lee
- John Doe
- 自定义:
- [root@desktop243 Desktop]# gawk 'ORS="\n+-+\n"{print $1,$2}' names
- Tome Savage
- +-+
- Molly Lee
- +-+
- John Doe
- +-+
- [root@desktop243 Desktop]# echo "Mayy Daly" >> names
- [root@desktop243 Desktop]# gawk '{print NF,$0}' names
- Tome Savage
- Molly Lee
- John Doe
- Mayy Daly
- [root@desktop243 Desktop]# gawk '{print NR,": ->",$0}' /etc/passwd
- : -> root:x:::root:/root:/bin/bash
- : -> bin:x:::bin:/bin:/sbin/nologin
- …… ……
- : -> student:x::::/home/student:/bin/bash
- : -> visitor:x::::/home/visitor:/bin/bash
字段分隔符
- 实例:
- [root@desktop243Desktop]# cat /etc/passwd | gawk 'BEGIN{FS=":";print"--count
- normal user now--"}$3 >= 500 { print $1;count++} END {printf("Total : %d
- Normal users\n",count)}'
- --count normal user now--
- nfsnobody
- student
- visitor
- Total : Normal users
- 默认是以空格为分隔符
- [root@desktop243 Desktop]# gawk 'NR <= 4 {print NR,$1}' /etc/passwd
- root:x:::root:/root:/bin/bash
- bin:x:::bin:/bin:/sbin/nologin
- daemon:x:::daemon:/sbin:/sbin/nologin
- adm:x:::adm:/var/adm:/sbin/nologin
- 指定分隔符为“:”
- [root@desktop243 Desktop]# gawk -F : 'NR <= 4 {print NR,$1}' /etc/passwd
- root
- bin
- daemon
- adm
模式
- 实例:
- [root@desktop2 Desktop]# gawk '/^root/' /etc/passwd
- root:x:::root:/root:/bin/bash
- [root@desktop2 Desktop]# gawk '/^root/ || /^student/' /etc/passwd
- root:x:::root:/root:/bin/bash
- student:x::::/home/student:/bin/bash
- [root@desktop2 Desktop]# gawk -F: '/student/{print $1":"$3}' /etc/passwd
- student:
- [root@desktop2 Desktop]# gawk '/^sshd/,/^stude*/' /etc/passwd
- sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
- nslcd:x:::LDAP Client User:/:/sbin/nologin
- tcpdump:x::::/:/sbin/nologin
- pulse:x:::PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
- gdm:x::::/var/lib/gdm:/sbin/nologin
- student:x::::/home/student:/bin/bash
操作
模式 { 操作语句 1 操作语句 2 ...... }
正则表达式
匹配操作符
- [root@desktop2 Desktop]# gawk -F: '$1 ~ /[sS]tud*/{print $1":"$3}' /etc/passwd
- student:
POSIX 字符类表达式
awk 脚本
- [root@desktop2 Desktop]#vim info
- #!/bin/gawk
- # The first awk script
- /student/ { print "Studentid is" , $}
- /vistor/ {print "vistor id is", $}
- 运行:
- [root@desktop2 Desktop]#gawk -F: -f info /etc/passwd
比较表达式
条件表达式
- [root@desktop2Desktop]#echo "111 333"| gawk '{max=$1>$2?$1:$2;print max}'
- [root@desktop Desktop]# cat /etc/passwd | gawk -F: '{printf("%s is %s
- user\n",$1,$3 >= 500?"Normal":"System") }'
- rootis System user
- bin is System user
- …… ……
- student is Normal user
- visitor is Normal user
算术运算
逻辑操作符
范围模式
验证数据的有效性
- [root@shiyan ~]# cat employees
- Name Numbers Time Price
- Tome //
- Marry //
- Molly //
- John //
- Tome //
- Molly //
- John //
- [root@shiyan ~]# gawk 'NF !=4 {print NR,": has only",NF,"fileds"}' employees
- : has only fileds
- : has only fileds
数值变量和字符串变量
用户自定义变量
- [root@sya ~]#gawk'$1~/^T/{wage=$2*$4;print$1,$3,"wage:",wage}' ./employees
- Tome // wage:
- Tome // wage:
BEGIN 模式
- [root@shiyan ~]# gawk 'BEGIN{FS=":";OFS="\t\t";ORS="\n****\n"} NR >=20 &&
- NR <= {print $,$NF}' /etc/passwd
- smmsp /sbin/nologin
- ****
- nscd /sbin/nologin
- ****
- oprofile /sbin/nologin
- ****
- pcap /sbin/nologin
- ****
- [root@desktop1 Desktop]# echo "$(date +%F)" | gawk 'BEGIN{FS="-";} \
- > { print $"/"$"/"$}'
- //
- [root@shiyan ~]# gawk 'BEGIN{print "Hello World"}'
- Hello World
END 模式
- [root@shiyan ~]# gawk 'END{print "Total user:",NR}' /etc/passwd
- Total user:
- [root@shiyan ~]#gawk '/^<Virt/ { total++ } END { print total, virtual hosts }'
- /etc/httpd/httpd.conf
- virtual hosts
输出重定向
- [root@shiyan ~]# vim rw.awk
- #!/bin/gawk
- { \
- if ( NF != ) \
- { \
- print "Line",NR,":missing some info" \
- }else{ \
- print $,"saled:",$*$ > "/root/cc"\
- } \
- }
- 测试:
- [root@shiyan ~]# gawk -f rw.awk employees
- Line :missing some info
- Line :missing some info
- [root@shiyan ~]# cat cc
- Tome saled:
- Marry saled:
- Molly saled:
- John saled:
- John saled:
输入重定向-读输入 getline
- [root@shiyan ~]# gawk 'BEGIN{"date"| getline DATE}{print DATE,$1,$7}'
- /etc/passwd
- 年 月 日 星期六 :: CST root:x:::root:/root:/bin/bash
- 年 月 日 星期六 :: CST bin:x:::bin:/bin:/sbin/nologin
- …… ……
- [root@shiyan ~]# gawk 'BEGIN{"date +%F"| getline DATE}{print DATE,$1,$7}'
- /etc/passwd
- -- root:x:::root:/root:/bin/bash
- -- bin:x:::bin:/bin:/sbin/nologin
- …… ……
- [root@shiyan ~]# gawk 'BEGIN{print"What is your name?";\
- >getline name < "/dev/tty"}\
- >$ ~ name{print "Found",name,"online",NR".";\
- >print"NIce to meet you",name,"@_@"}' /etc/passwd
- Whatis your name?
- student #getline 是重定向到终端接受的
- Found student online .
- NIce to meet you student @_@
Bash 向 awk 发送参数
- [root@shiyan ~]# echo "$(date +%F)"|gawk 'BEGIN{ FS=":";\
- >getline D < "-"}NR>={print D" "$"/"$":"$}' /etc/passwd
- -- avahi-autoipd/:/sbin/nologin
- -- student/:/bin/bash
- -- visitor/:/bin/bash
- -- oracle/:/bin/bash
管道
- [root@shiyan ~]# gawk '/^[^#:]+/{print $1}' /etc/hosts
- 127.0.0.1
- 172.24.205.191
- 172.24.200.254
- 172.24.254.254
- [root@shiyan ~]# gawk '/^[^#:]+/{print $1 |"ping -c2 "$1}' /etc/hosts
- PING 127.0.0.1 (127.0.0.1) () bytes of data.
- bytes from 127.0.0.1: icmp_seq= ttl= time=0.028 ms
- connect: Network is unreachable
- connect: Network is unreachable
- connect: Network is unreachable
- bytes from 127.0.0.1: icmp_seq= ttl= time=0.037 ms
- --- 127.0.0.1 ping statistics ---
- packets transmitted, received, % packetloss, time 999ms
- rtt min/avg/max/mdev = 0.028/0.032/0.037/0.007 ms
关闭文件和管道
system 函数
- [root@desktop1 Desktop]# gawk '/^[^#:]/{ if(system("ping -c2 "
- $" > /dev/null")== ){print $" is on line"}else{ print $" is down"}}' /etc/hosts
- 127.0.0.1 is on line
- 172.24.0.2 is down
- 172.24.200.254 is on line
- 172.24.254.254 is on line
- 注意里面的空格“ ” !
if 语句
if/else 语句
if/else 和 else if 语句
while 循环
- [root@desktop Desktop]# gawk -F: '{print NR,":User info:\n======";i=1;
- while(i<=NF){print $i;i++};print "\n"}' /etc/passwd
- :User info:
- ======
- root
- x
- root
- /root
- /bin/bash
- …… ……
- :User info:
- ======
- visitor
- x
- /home/visitor
- /bin/bash
for 循环
- [root@desktop Desktop]# gawk -F: '{print NR,":User info:\n======";
- i=;for(;i<=NF;i++){print $i};print "\n"}' /etc/passwd
- :User info:
- ======
- root
- x
- root
- /root
- /bin/bash
- :User info:
- ======
- bin
- x
- bin
- /bin
- /sbin/nologin
- …… ……
循环控制
- 为了方便实验,创建一个/tmp/passwd:
- [root@localhost ~]# cat /tmp/passwd
- avahi-autoipd:x:::avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
- student:x::::/home/student:/bin/bash
- visitor:x::::/home/visitor:/bin/bash
- harry:x::::/home/harry:/bin/bash
- [root@desktop Desktop]# gawk -F: '{i=1;
- while(i++ < NF ){
- if($i~/daemon/)
- {print NR,$;break;}
- }
- }' /etc/passwd
- daemon
- haldaemon
- avahi
- continue 语句:会将匹配的这行其他段打印出来,继续往下查询
- [root@localhost ~]# cat /tmp/passwd | gawk -F: '{ i=0;
- while(i++ < NF){if($i~/student/){ print "========";continue; }
- else { print $i ;}}}'
- avahi-autoipd
- x
- avahi-autoipd
- /var/lib/avahi-autoipd
- /sbin/nologin
- ========
- x
- ========
- /bin/bash
- visitor
- x
- /home/visitor
- /bin/bash
- harry
- x
- /home/harry
- /bin/bash
- break 语句:匹配的这行其他段都不会打印,继续往下查询
- [root@localhost ~]# cat /tmp/passwd | gawk -F: '{ i=0;
- while(i++ < NF){if($i~/student/){ print "========";break; }
- else { print $i ;}}}'
- avahi-autoipd
- x
- avahi-autoipd
- /var/lib/avahi-autoipd
- /sbin/nologin
- ========
- visitor
- x
- /home/visitor
- /bin/bash
- harry
- x
- /home/harry
- /bin/bash
next 语句
- [root@desktop18 Desktop]# gawk -F: '{if($3<500){next;}else{print $1}}'
- /etc/passwd
- nfsnobody
- student
- visitor
exit 语句
- exit,找到匹配的就会退出,返回 ,不再往下查询:
- [root@localhost ~]# cat /tmp/passwd | gawk -F: '{ i=0;while(i++ <
- NF){if($i~/student/){ print "========";exit(); } else { print $i ;}}}'
- avahi-autoipd
- x
- avahi-autoipd
- /var/lib/avahi-autoipd
- /sbin/nologin
- ========
- [root@localhost ~]# echo $?
关联数组的下标
- [root@desktop18 Desktop]# vim employess
- Tom //
- Mary //
- Bill //
- Mary //
- Tom //
- [root@desktop18 Desktop]# gawk '{ name[k++]=$1} END{for(i=0;i<NR;i++){
- printi,name[i]}}' employess
- Tom
- Mary
- Bill
- Mary
- Tom
用字符串作为数组的下标

- 将用户名($)相同的行的工资($)相加
- [root@desktop18 Desktop]# gawk '{ name[$1]+=$4} END{for(Name in name){
- print Name,":",name[Name]}}' employess
- Tom :
- Mary :
- Bill :
处理命令行参数
- [root@desktop18 Desktop]# vim argvs
- #!/bin/gawk
- BEGIN{\
- for ( i=;i < ARGC ; i++ )\
- { \
- printf( "ARGV[%d] is --> %s\n",i,ARGV[i])\
- }\
- printf( "Total : %d parameters\n",ARGC);\
- }
- [root@desktop18 Desktop]# gawk -f argvs /etc /root 172.24.200.254
- ARGV[] is --> gawk
- ARGV[] is --> /etc
- ARGV[] is --> /root
- ARGV[] is -->
- ARGV[] is --> 172.24.200.254
- Total : parameters
- [root@desktop18 Desktop]# gawk -f argvs /etc "ls /root"
- ARGV[] is --> gawk
- ARGV[] is --> /etc
- ARGV[] is --> ls /root
- Total : parameters
- [root@desktop18 Desktop]# echo "172.24.200.254" | xargs ping -c2
- PING 172.24.200.254 (172.24.200.254) () bytes of data.
- From 192.168.117.167 icmp_seq= Destination Host Unreachable
- From 192.168.117.167 icmp_seq= Destination Host Unreachable
- --- 172.24.200.254 ping statistics ---
- packets transmitted, received, + errors, % packetloss, time 3000ms
- pipe
- [root@desktop18 Desktop]# echo "172.24.200.254 /etc/passwd /root" | xargs
- gawk -f argvs
- ARGV[] is --> gawk
- ARGV[] is --> 172.24.200.254
- ARGV[] is --> /etc/passwd
- ARGV[] is --> /root
- Total : parameters
字符串 sub 和 gsub 函数
- [root@desk18Desktop]# gawk '{sub(/[Tt]om/,"ttooomm",$1);print $0}' employess
- ttooomm //
- Mary //
- Bill //
- Mary //
- ttooomm //
- sub:只对匹配部分一次替换
- [root@desktop18 Desktop]# gawk '{sub(/0/,"kkkkk");print $0}' employess
- Tom 2kkkkk08//
- Mary 2kkkkk08//
- Bill 2kkkkk09//
- Mary 2kkkkk09//
- Tom 2kkkkk09//
- gsub 全部替换
- [root@desktop18 Desktop]# gawk '{gsub(/0/,"kkkkk");print $0}' employess
- Tom 2kkkkkkkkkk8/kkkkk3/kkkkk5
- Mary 2kkkkkkkkkk8/kkkkk4/kkkkk6
- Bill 2kkkkkkkkkk9/1kkkkk/kkkkk9
- Mary 2kkkkkkkkkk9/1kkkkk/
- Tom 2kkkkkkkkkk9//1kkkkk
sub 函数示例
字符串长度 length 函数
- 带参数:
- [root@desktop18 Desktop]# echo "123qwe" | gawk 'BEGIN{getline RR <"-";print
- length(RR)}'
- [root@desktop18 Desktop]# gawk '{print $1,length($1)}' employess
- Tom
- Mary
- Bill
- Mary
- Tom
- 不带参数:
- [root@desktop18 Desktop]# gawk '{print $1,length}' employess
- Tom
- Mary
- Bill
- Mary
- Tom
字符 substr 函数
- [root@desktop18 Desktop]# gawk '{print substr($1,2,length)}' employess
- om
- ary
字符 match 函数
- [root@desktop18 Desktop]# gawk '{print $3}' employess --
- --
- //
- --
- --
- [root@desktop18 Desktop]# gawk '{match($3,/[12][0-9][0-9][0-9]/);
- print $,substr($,RSTART,RLENGTH)}' employess
- Tom
- Mary
- Bill
- Mary
- Tom
字符 split 函数
- [root@desktop18 Desktop]# cat database
- -- car
- -- car
- -- dog
- -- bike
- 统计 月份的销售总额:
- [root@desktop18 Desktop]# gawk '{
- >split($,DATE,"-");
- > if(DATE[] == ){
- > count+=$
- > }
- >}
- >END{
- > print "May : "count
- >}' database
- May :
整数 int 函数
生成随机数
- [root@desktop18 Desktop]# gawk '{print NR,rand()}' database
- 0.237788
- 0.291066
- 0.845814
- 0.152208
- [root@desktop18 Desktop]# gawk '{print NR,rand()}' /etc/passwd
- 0.237788
- 0.291066
- 0.845814
- 0.152208
- …… ……
- 0.377663
- 0.899756
- 当有种子时,生成的随机数不同文件或同一文件相同行的随机数是不一样的,文件有多少行
- 就生成多少个随机数
- [root@desktop18 Desktop]# gawk 'BEGIN{srand()}{print NR,rand()}' database
- 0.78965
- 0.970641
- 0.284081
- 0.819256
- [root@desktop18 Desktop]# gawk 'BEGIN{srand()}{print NR,rand()}' database
- 0.532605
- 0.737259
- 0.105589
- 0.0879184
技能掌握测试题:
- 题1:
- [root@desktop215 Desktop]# gawk '{
- > split($,DATE,"-"); 先将日期的月份拆分成一个数组
- > if(DATE[] == ){
- > name[$]+=$}
- > }
- # 如果月份是 月,就将以姓名(字符串)为数组下标,将相同名字的销售额相
- > END{
- > for(Name in name){
- > print Name,": 05",name[Name]}
- > }' sales
- Tom :
- Mary :
- 方法 :
- [root@desktop215 Desktop]# gawk '
- $ ~ //{name[$]+=$}
- END{
- for(Name in name){
- print Name,": 05",name[Name]}
- }' sales
- Tom :
- Mary :
题二:
- [root@desktop215 Desktop]# gawk '{OFS="\t"; print $1,
- substr($,,)"-"substr($,,)"-"substr($,,),
- $,$,$}' sales2 > /root/Desktop/sales3
- [root@desktop215 Desktop]# cat /root/Desktop/sales3
- Tom -- car
- Mary -- car
- Tom -- bike
- Mary -- car
- 导入数据库:
- mysql> use bluefox;
- Database changed
- mysql> create table sale( name varchar(), time date, spes varchar(), num
- int(), money int() );
- Query OK, rows affected (0.11 sec)
- mysql> select * from sale;
- +------+------------+------+------+-------+
- | name | time | spes | num | money |
- +------+------------+------+------+-------+
- | Tom | -- | car | | |
- | Mary | -- | car | | |
- | Tom | -- | bike | | |
- | Mary | -- | car | | |
- +------+------------+------+------+-------+
- rows in set (0.00 sec)
awk 实用案例介绍的更多相关文章
- SQL Delta实用案例介绍,很好的东西,帮了我不少忙
SQL Delta实用案例介绍 概述 本篇文章主要介绍SQL DELTA的简单使用.为了能够更加明了的说明其功能,本文将通过实际项目中的案例加以介绍. 主要容 SQL DELTA 简介 ...
- SQL Delta实用案例介绍
概述 本篇文章主要介绍SQL DELTA的简单使用.为了能够更加明了的说明其功能,本文将通过实际项目中的案例加以介绍. 主要容 SQL DELTA 简介 创建SQL DELTA项目 ...
- SQL Delta实用案例介绍 (对应软件)
http://blog.csdn.net/hongdi/article/details/5363209
- JAVA实用案例之水印开发
写在最前面 上周零零碎碎花了一周的时间研究水印的开发,现在终于写了个入门级的Demo,做下笔记同时分享出来供大家参考. Demo是在我上次写的 JAVA实用案例之文件导入导出(POI方式) 框架基础上 ...
- JAVA实用案例之图片水印开发
写在最前面 上周零零碎碎花了一周的时间研究水印的开发,现在终于写了个入门级的Demo,做下笔记同时分享出来供大家参考. Demo是在我上次写的 JAVA实用案例之文件导入导出(POI方式) 框架基础上 ...
- JAVA实用案例之文件导出(JasperReport踩坑实录)
写在最前面 想想来新公司也快五个月了,恍惚一瞬间. 翻了翻博客,因为太忙,也有将近五个多月没认真总结过了. 正好趁着今天老婆出门团建的机会,记录下最近这段时间遇到的大坑-JasperReport. 六 ...
- InfluxDB 聚合函数实用案例
InfluxDB 聚合函数实用案例 文章大纲 InfluxDB 简介 InfluxDB是GO语言编写的分布式时间序列化数据库,非常适合对数据(跟随时间变化而变化的数据)的跟踪.监控和分析.在我们的项目 ...
- 精选19款华丽的HTML5动画和实用案例
下面是本人收集的19款超酷HTML5动画和实用案例,觉得不错,分享给大家. 1.HTML5 Canvas火焰喷射动画效果 还记得以前分享过的一款HTML5烟花动画HTML5 Canvas烟花特效,今天 ...
- 3星|《AI极简经济学》:AI的预测、决策、战略等方面的应用案例介绍
AI极简经济学 主要内容是AI的各种应用案例介绍.作者把这些案例分到五个部分介绍:预测.决策.工具.战略.社会. 看书名和介绍以为会从经济学的角度解读AI,有更多的新鲜的视角和观点,读后比较失望,基本 ...
随机推荐
- Java并发编程总结(一)Syncronized解析
Syncronized解析 作用: )确保线程互斥的访问同步代码 )保证共享变量的修改能够及时可见 )有效解决重排序问题. 用法: )修饰普通方法(锁是当前实例对象) )修饰静态方法(锁是当前对象的C ...
- python requests简单接口自动化
get方法 url:显而易见,就是接口的地址url啦 headers:定制请求头(headers),例如:content-type = application/x-www-form-urlencode ...
- 一个关于内联优化和调用约定的Bug
很久没有更新博客了(博客园怎么还不更新后台),前几天在写一个Linux 0.11的实验 [1] 时遇到了一个奇葩的Bug,就在这简单记录一下调试过程吧. 现象 这个实验要求在Linux 0.11中实现 ...
- Python的Argparse模块是什么?
近日在阅读代码的过程中遇到了Argparse模块,记得前段时间已经看了,可是过了两周现在又忘了, 看来写代码一定要钻研到底搞清楚其中原委才行,本文主要参考Python3.6系列官方文档 ...
- C# 中yield关键字解析
前言 前段时间了解到yield关键字,一直觉得还不错.今天给大家分享一下yield关键字的用法.yield return 返回集合不是一次性返回所有集合元素,而是一次调用返回一个元素.具体如何使用yi ...
- OTA升级详解(一)
不积跬步,无以至千里: 不积小流,无以成江海. 出自荀子<劝学篇> 1.概念解释 OTA是何物? 英文解释为 Over The Air,既空中下载的意思,具体指远程无线方式,OTA 技术可 ...
- SQLServer执行大脚本文件时,提示“无法执行脚本没有足够的内存继续执行程序 (mscorlib)”
问题描述: 有时候服务器操作导入数据.sql,或者 当需求不可以直接备份整库还原时,往往通过导出数据库脚本的方式来部署-还原数据库表 但是当数据库导出脚本很大,用Microsoft SQL Serve ...
- 数据结构(三十二)图的遍历(DFS、BFS)
图的遍历和树的遍历类似.图的遍历是指从图中的某个顶点出发,对图中的所有顶点访问且仅访问一次的过程.通常有两种遍历次序方案:深度优先遍历和广度优先遍历. 一.深度优先遍历 深度优先遍历(Depth_Fi ...
- python *args,**kwargs参数
实际上,关键的是*和** 我们以三个例子来解释: 普通的使用参数: def test1(arg): print(arg) test1("a") 输出: a *是将剩下的参数用元祖表 ...
- Linux 提示符格式及颜色
# 提示符颜色配置: 颜色 黑 红 绿 黄 青 紫 蓝 白 字体 30 31 32 33 34 35 36 37 背景 40 41 42 43 44 45 ...