Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Bash脚本读取文件,通过标签解析并插入mysql数据库_Mysql_Regex_Bash_File - Fatal编程技术网

使用Bash脚本读取文件,通过标签解析并插入mysql数据库

使用Bash脚本读取文件,通过标签解析并插入mysql数据库,mysql,regex,bash,file,Mysql,Regex,Bash,File,我正在做一个bash脚本,逐行读取文件,解析并将其插入mysql数据库 脚本如下所示: #!/bin/bash echo "Start!" while IFS=' ' read -ra ADDR; do for line in $(cat filename) do regex='(\d\d)-(\d\d)-(\d\d)\s(\d\d:\d\d:\d\d)' if [[$line=~$regex]] then $line

我正在做一个bash脚本,逐行读取文件,解析并将其插入mysql数据库

脚本如下所示:

#!/bin/bash

echo "Start!"

while IFS='     ' read -ra ADDR;
do
   for line in $(cat filename)
   do
      regex='(\d\d)-(\d\d)-(\d\d)\s(\d\d:\d\d:\d\d)'
      if [[$line=~$regex]]
      then
         $line='20$3-$2-$1 $4';
      fi
      echo "insert into table (time, total, caracas, anzoategui) values('$line', '$line', '$line', $
   done | mysql -uuser -ppassword database;
done < filename
而它却放弃了这个:

使用该语句。首先对文件进行任何必须的转换,然后

LOAD DATA LOCAL INFILE 'filename' INTO table (time, total, caracas, anzoategui)

默认情况下,以制表符分隔的字段

Bash使用POSIX字符类。因此,您可以使用
[0-9]
[[:digit:]]
来匹配数字,而不是
\d

此外,在正则表达式测试中,括号和运算符之间必须有空格。因此,
[[$line=~$regex]]
将通过执行
[[[$line=~$regex]]]
来修复


为了访问括号中的正则表达式,必须访问内置数组变量
BASH\u REMATCH
。因此,要访问第一个匹配,您需要引用
${BASH_REMATCH[1]}
,第二个
${BASH_REMATCH[2]}
,依此类推。

我建议您使用
awk
创建
sql
文件,然后从
mysql
获取它。一旦输出看起来正常,就将其重新定向到一个新文件(比如
insert.sql
)中,并从
mysql
命令行获取源代码。大概是这样的:

15/08/13 09:34:38       17528                                   5240    399     89      460     159     1107    33240
15/08/13 09:42:57       17528                                   5240    399     89      460     159     1107    33240
15/08/13 10:20:03       17492                                   5217    394     89      459     159     1101    33245
15/08/13 11:20:02       17521                                   5210    402     90      462     158     1112    33249
15/08/13 12:20:04       17540                                   5209    396     90      459     160     1105    33258
$ cat file
15/08/13 09:34:38       17528                                   5240    399     89      460     159     1107    33240
15/08/13 09:42:57       17528                                   5240    399     89      460     159     1107    33240
15/08/13 10:20:03       17492                                   5217    394     89      459     159     1101    33245
15/08/13 11:20:02       17521                                   5210    402     90      462     158     1112    33249
15/08/13 12:20:04       17540                                   5209    396     90      459     160     1105    33258
$ awk -F'[/ ]+' -v q="'" '{print "insert into table (time, total, caracas, anzoategui) values ("q"20"$3"-"$2"-"$1" "$4q","q$5q","q$6q","q$7q");"}' file
insert into table (time, total, caracas, anzoategui) values ('2013-08-15 09:34:38','17528','5240','399');
insert into table (time, total, caracas, anzoategui) values ('2013-08-15 09:42:57','17528','5240','399');
insert into table (time, total, caracas, anzoategui) values ('2013-08-15 10:20:03','17492','5217','394');
insert into table (time, total, caracas, anzoategui) values ('2013-08-15 11:20:02','17521','5210','402');
insert into table (time, total, caracas, anzoategui) values ('2013-08-15 12:20:04','17540','5209','396');