awk使用system()函数调用shell命令


0,今天遇到一个需求,就是提取用户的姓名和手机号,但是默认手机号是加密的,这里就需要批量解密数据然后和姓名一起输出到文件!

下面通过批量加/解密数据来演示一下如何通过system()函数来调用系统命令
1, 编写user.sql文件,内容如下:

1
2
3
4
5
6
7
张三  1111111111
赵四 2222222222
王五 3333333333
李六 4444444444
田七 5555555555
贴吧 6666666666
敬酒 7777777777

2, 使用base64进行批量加密

1
2
3
4
5
6
7
8
[[email protected] shell]# cat user.sql |awk '{print $1;system("echo "$2" |base64")}' |xargs -n2
张三 MTExMTExMTExMQo=
赵四 MjIyMjIyMjIyMgo=
王五 MzMzMzMzMzMzMwo=
李六 NDQ0NDQ0NDQ0NAo=
田七 NTU1NTU1NTU1NQo=
贴吧 NjY2NjY2NjY2Ngo=
敬酒 Nzc3Nzc3Nzc3Nwo=

姓名无需加密,所以直接print出来,到手机号这里也就是$2就需要进行加密操作了,system()函数只需要将属于shell命令的地方用双引号引起来就好了,注意引号里命令的”空格”,使用”xargs -n2”是为了让数据在一行显示
3, 使用md5sum进行批量加密

1
2
3
4
5
6
7
8
[[email protected] shell]# cat user.sql |awk '{print $1;system("echo "$2" |md5sum |xargs -d'-'")}' |xargs -n2
张三 b2c5860a03d2c4f1f049a3b2409b39a8
赵四 b8fdaa19d9fad56810253ba652081e67
王五 8a848b6348e182648878711f9aa9713f
李六 7289c6ad35de1b7d3209b6fee0cb62bb
田七 3151c62af8684438cdeb9fddc0e0e99e
贴吧 2c2877a2bc7252d4696b38804c5c5711
敬酒 a7f70fb8e0fcfb90d55017d749355efd

– 和上次不一样的地方是,使用md5sum加密之后会在密值后面多出一个’-‘号,所以使用xargs删掉这个符号. –
4, 下面来解密一下数据是否正确

1
2
3
4
5
6
7
8
[[email protected] shell]# cat user.sql 
张三 MTExMTExMTExMQo=
赵四 MjIyMjIyMjIyMgo=
王五 MzMzMzMzMzMzMwo=
李六 NDQ0NDQ0NDQ0NAo=
田七 NTU1NTU1NTU1NQo=
贴吧 NjY2NjY2NjY2Ngo=
敬酒 Nzc3Nzc3Nzc3Nwo=

解密后的结果

1
2
3
4
5
6
7
8
[[email protected] shell]# cat user.sql |awk '{print $1;system("echo "$2" |base64 -d")}' |xargs -n2
张三 1111111111
赵四 2222222222
王五 3333333333
李六 4444444444
田七 5555555555
贴吧 6666666666
敬酒 7777777777