1. shell 练习题

除了 mysql,performance_schema,information_schmema 以外的
每个数据库都增加一个表,名称是stock
字段名称如下:

日期,股票代码,名称,收盘价,最高价,最低价,开盘价,前收盘,涨跌额,涨跌幅,换手率,成交量,成交金额,总市值,流通市值

同时对日期进行创建索引
所有字段都是 varchar(255)

首先启动本机的 mariadb
systemctl enable mariadb && systemctl start mariadb

create index stock_riqi_idx on stock(`日期`)

参考案例

#!/bin/bash
#1 get all the database name
#2 render the databases ,use show tables the get tables
#3 end
for db in `echo "show databases;" | mysql -s  `
do
echo "DB: $db "
mysql <<EOF  | sed 's/^/Table: /g'
use $db;
show tables;
EOF

done

#
#日期,股票代码,名称,收盘价,最高价,最低价,开盘价,前收盘,涨跌额,涨跌幅,换手率,成交量,成交金额,总市值,流通市值

head -1 000001.csv |dos2unix | sed -e 's/,/` varchar(255), `/g' -e 's/^/create table stock(`/g' -e 's/$/` varchar(255) )  charset=utf8; /g' 

下载股票文件

#!/bin/bash

url='http://pan.itshine.cn:5080/?explorer/share/fileOut&shareID=64h6PiQQ&path=%7BshareItemLink%3A64h6PiQQ%7D%2F%E5%A4%A7%E6%95%B0%E6%8D%AE%2F%E8%82%A1%E7%A5%A8%E6%95%B0%E6%8D%AE%2Fstock%2F'
# '000007.csv'

for n in {1..500}
do
        newfn="`printf %06d $n `.csv"
        down_file="$url$newfn"
        echo "starting download $down_file"
        df=`echo $down_file | sed -e "s/^/'/g" -e "s/$/'/g"`
        echo $df | xargs curl >$newfn

done

#导入数据库
自动从5080网站下载100个文件的数据,注意,下载文件的大小大于10k的才算是正确的下载,下载参照上面的脚本

然后把这些股票文件的内容导入数据库里面,所有文件都导入。
这个是在mysql里执行导入数据的语法

load data local infile ‘/root/bin/000001.csv’ into table stock fields terminated by ‘,’ ignore 1 lines;

自动导入excel文件到数据库

下载gnumeric

这包里面包含了ssconvert命令,讲excels导出为csv文件

curl http://repo.iotti.biz/CentOS/7/noarch/lux-release-7-1.noarch.rpm >lux-release-7-1.noarch.rpm
rpm -ivh lux-release-7-1.noarch.rpm
yum -y install gnumeric

ssconvert -S my.xls a.csv 2>/dev/null

参考代码如下

 #!/bin/bash

## ssconvert 
# ssconvert -S my.xls my.csv
# my.csv.1 my.csv.2 my.csv.3

function ensure_gnumeric()
{
 curl http://repo.iotti.biz/CentOS/7/noarch/lux-release-7-1.noarch.rpm >lux-release-7-1.noarch.rpm
 rpm -ivh lux-release-7-1.noarch.rpm  &>/dev/null
 yum -y install gnumeric &>/dev/null
}

#
#
# my.xls.csv.1,my.xls.csv.2,my.xls.csv.3
function convert_excel()
{
    xls=$1
    mkdir -p csvs
    rm -fr csvs/*

    ssconvert -S $xls csvs/${xls}.csv 
}
function run_sql()
{
  sql=$1
  mysql -e "$1"
}
# create_database filename 
function create_database()
{
# my.xls.csv.xls
  xls=$1
  # table=`awk -F. '{print $1}' `
  db=`cut -d'.' -f1`

  run_sql "create database $db ; " 
}
# create_tables my.csv.1

function create_tables()
{
   csv=$1
   num=$2
   table=`echo $csv | awk -F. '{print $1}' `
   table="T$num"$table
   head -1 $csv |dos2unix | sed -e 's/,/` varchar(255), `/g' -e 's/^/create table $table(`/g' -e 's/$/` varchar(255) )  charset=utf8; /g' >$$
   run_sql  "`cat $$ `"
   rm -f $$    
}
# loaddata table, csv
function load_data()
{
   table=$1
   csv=$2
   sql="load data local infile $2 into table $table fields terminated by ',' ignore 1 lines; "
   run_sql "$sql"
}
excel=$1 
ensure_gnumeric

convert_excel $excel

create_database $excel


sheet=1

for f in csvs/*
do
    create_tables "$f" $sheet
    table=`echo $f | awk -F. '{print $1}' `
    table="T$num"$table

    sheet=$((shell+1))
    load_data $table $f 
done


作者:严锋  创建时间:2023-12-09 13:05
最后编辑:严锋  更新时间:2025-05-09 15:48