1、将mysql的字段类型替换成其他数据库的字段类型,本案例中其他数据库类型为SequoiaDB:
mysql -h localhost -u admin -padmin -e "describe $tableName" | awk '{
if(NR!=1){
fname=$1
ftype=$2
gsub(/varchar.*|char.*/,"string",ftype)
gsub(/longtext/,"string",ftype)
gsub(/text/,"string",ftype)
gsub(/bigint.*/,"long",ftype)
gsub(/int.*/,"int",ftype)
gsub(/float.*/,"double",ftype)
gsub(/datetime.*/,"string",ftype)
gsub(/timestamp.*/,"timestamp",ftype)
gsub(/tinyint.*/,"int",ftype)
print fname,ftype
}
}'
#(1)
#NR是awk中的内置变量,记录文件的行号,从1开始。新文件不从1开始。类似的内置变量如下:
#NF:字段个数
#FNR:记录文件的行号,从1开始。新文件也从1开始。
#FS:输入字段分隔符,默认为空格。
#OFS:输出字段分隔符,默认为空格。
#(2)
#其中varchar.*的含义是:匹配以varchar开头的,后面0个或多个任意字符串。换行符除外。
#(3)
#sub匹配第一次出现的符合模式的字符串,相当于 sed 's//'
#gsub匹配所有的符合模式的字符串,相当于 sed 's//g'
2、awk -F以指定分隔符将文件分割成若干列:
awk -F, '{print $1,$2}' log.txt #以逗号分割,并打印第一列和第二列
#cut命令同样可以实现上述功能,实现方式如下
cut -d "," -f 1,2
3、输出第一列大于2且第二列等于2的行:
awk '$1>2 && $2=="2" {print $1,$2,$3}' a.txt
4、输出第一列包含指定字符串的行:
awk '$1 ~ /匹配字符串/' test.sh
awk 'BEGIN{IGNORECASE=1} /匹配字符串/' log.txt #忽略大小写匹配
5、使用awk进行小数运算:
a=1.23123
b=2.03251
c=$(echo "${a} ${b}" | awk '{printf("%.2f",'${a}'+'${b}') }')
echo $c