excel合并

1、把需要合并的excel表格文档放到同一个文件夹里
2、新建一个“数据合并.xlsx“文档
3、打开“数据合并.xlsx“文档,在”Sheet1“工作表的地方右键→查看代码(快捷键:“Alt+F11”,尽量选用快)进入到microsoft Visual Basic for Applications窗口
4、双击工程资源管理器里面的sheet1,在右侧的代码区粘贴如下代码:

Sub 合并当前目录下所有工作簿的全部工作表() 

Dim MyPath, MyName, AWbName 

Dim Wb As Workbook, WbN As String 

Dim G As Long 

Dim Num As Long 

Dim BOX As String 

Application.ScreenUpdating = False 

MyPath = ActiveWorkbook.Path 

MyName = Dir(MyPath & "\" & "*.csv") 

AWbName = ActiveWorkbook.Name 

Num = 0 

Do While MyName <> "" 

If MyName <> AWbName Then 

Set Wb = Workbooks.Open(MyPath & "\" & MyName) 

Num = Num + 1 
IF Num=1  Then
With Workbooks(1).ActiveSheet 


For G = 1 To Sheets.Count 

Wb.Sheets(G).UsedRange.Copy .Cells(.Range("A65536").End(xlUp).Row  , 1) 

Next 

WbN = WbN & Chr(13) & Wb.Name 

Wb.Close False 

End With 

Else
With Workbooks(1).ActiveSheet 


For G = 1 To Sheets.Count 

Wb.Sheets(G).UsedRange.Copy .Cells(.Range("A2").End(xlDown).Row +1   , 1) 

Next 

WbN = WbN & Chr(13) & Wb.Name 

Wb.Close False 

End With 
End if

End If 

MyName = Dir 

Loop 

Range("A1").Select 

Application.ScreenUpdating = True 

MsgBox "共合并了" & Num & "个工作薄下的全部工作表。如下:" & Chr(13) & WbN,vbInformation, "提示" 

End Sub 

5、运行→运行子过程/用户窗体(或者直接点击运行按钮,快捷键:F5),即可合并所有Excel表格到”数据合并.xlsx“文档的Sheet1工作表里面
注意:如果合并出现问题可能是因为代码部分excel文件后缀不同导致,修改代码MyName部分即可。

shell脚本脱敏

在实际生产环境中我们会碰到自动化脚本的编写过程中会写入账号密码的情况,加入此服务器被入侵或者其他人员无意中获得访问此服务器的权限,那么密码就完全暴露在非授权人员的眼前,系统数据安全岌岌可危。
所以我们需要对这部分数据进行加密处理.虽然现在的gpg加密软件虽然能够更强的保证数据安全,但是此软件加密后的文件不能够执行,从而丧失了shell脚本的作用。此处选择shc进行文件脱敏,因为此种功能只是将shell源码编译成c语言执行文件,所以严格意义上说并非加密。但是此种方法确实能够实现脱敏。

安装

wget http://www.datsi.fi.upm.es/%7Efrosal/sources/shc-3.8.7.tgz
yum install make gcc
make test
make string 
touch -p  /usr/local/man/man1/
make install

使用

执行以下命令会生成一个可执行的脚本

shc -v -f a.sh

执行之后会生成a.sh.x
a.sh.x.c,a.sh.x.c是c语言源码文件,a.sh.x是通过c源码文件编译成的二进制文件。
通常采取的策略是删除a.sh.x.c文件,a.sh.x是直接可以执行的脚本文件,将这个文件重命名为a.sh就可以了。

当我们需要把脚本文件拷贝到其他服务器上执行的时候使用上面的语句生成的a.sh.x还不行,还需要添加一个参数-r。
-r Relax security. Make a redistributable binary which executes on different systems running the same operating system.

shc -v -r -f a.sh

至此脚本脱敏已完成

注意

由于此种方法只是通过编译的二进制的方式进行加密,所以通过逆向的方式还是有一定几率还原出脚本内容的,所以不算真正的加密。我没有实践过,但是原理上还原出来是可行的。

mysql sql 常用语法

sql实战新手入门
http://www.educity.cn/develop/dbms/201307241102471851.htm

mysql union

UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。
UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。 同时,每条 SELECT 语句中的列的顺序必须相同.

SELECT column_name FROM table1
UNION
SELECT column_name FROM table2

UNION ALL,不消除重复行

SELECT column_name FROM table1
UNION ALL
SELECT column_name FROM table2

注意:union 的列数必须一样.列的类型可以不一样,但推荐查询的每一列,相对应的类型应一样.
多次sql语句取出的列名可以不一致,此时以第一个sql语句的列名为准。

mysql jion

1.内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。
2.外联结:分为外左联结和外右联结。

案例背景

create table java (name varchar(255));
insert into java values ('java1'),('java2'),('blue'); 
create table mysql (name varchar(255));
insert into mysql values ('mysql1'),('mysql2'),('blue'); 

内联结

select * from java,mysql where java.name=mysql.name;
SELECT * FROM java  JOIN mysql ON java.name=mysql.name;
SELECT * FROM java INNER JOIN mysql ON java.name=mysql.name;
SELECT * FROM java CROSS JOIN mysql ON java.name=mysql.name;
SELECT * FROM java  STRAIGHT_JOIN  mysql ON java.name=mysql.name;

这四个语句都是内联结,返回结果都是

+------+------+
| name | name |
+------+------+
| blue | blue |
+------+------+

table_reference条目中的每个逗号都看作相当于一个内部联合 默认的JOIN都是INNER JOIN CROSS JOIN从语法上说与INNER JOIN等同 STRAIGHT_JOIN与JOIN相同。除了有一点不一样,左表会在右表之前被读取。STRAIGH_JOIN可以被用于这样的情况,即联合优化符以错误的顺序排列表。
内联结的语法如下:

join_table:
    table_reference [INNER | CROSS] JOIN table_factor [join_condition]
  | table_reference STRAIGHT_JOIN table_factor
  | table_reference STRAIGHT_JOIN table_factor ON condition

外联结

左联结
SELECT * FROM java LEFT JOIN mysql ON java.name=mysql.name;

结果是

+-------+------+
| name  | name |
+-------+------+
| java1 | NULL |
| java2 | NULL |
| blue  | blue |
+-------+------+

所以从上面结果看出,因为java表中的java1和java2记录的name没有在mysql表中有对应name,因此为空,但java 所有的列栏仍有java1和java2记录,mysql表所有列栏为NULL。而剩下的blue的那条记录就是java表和mysql表内连接的结果。 如果对于在LEFT JOIN中的ON或USING部分中的右表没有匹配的记录,则所有列被设置为NULL的一个行被用于右表。如果一个表在其它表中没有对应部分,您可以使用这种方法在这种表中查找记录:

SELECT * FROM java LEFT JOIN mysql ON java.name=mysql.name WHERE mysql.name IS NULL; 

该sql找出在java的人,但是不在mysql里的人,这里明显是人员’java1’和’java2’符合要求。

右联结
SELECT * FROM java RIGHT JOIN mysql ON java.name=mysql.name;

返回结果是

+------+--------+
| name | name   |
+------+--------+
| NULL | mysql1 |
| NULL | mysql2 |
| blue | blue   |
+------+--------+

右联结和左联接结果类似,只是这次是mysql表保存所有的结果集。

外联结的语法

join_table:| table_reference LEFT [OUTER] JOIN table_reference join_condition
  | table_reference NATURAL [LEFT [OUTER]] JOIN table_factor
  | table_reference RIGHT [OUTER] JOIN table_reference join_condition
  | table_reference NATURAL [RIGHT [OUTER]] JOIN table_factor