Chinaunix

标题: 急,这个md5加密的脚本如何写 [打印本页]

作者: wzl189189    时间: 2017-01-11 14:09
标题: 急,这个md5加密的脚本如何写
有多列数据的文本,比如 一个文本  a.txt

  日期  卡号  姓名
  2016   123 张三
  2016   234  李武
  2019   222 老李
对第二列用md5加密 后变成另外一个文本 b.txt,内容如下:
  日期      卡号        姓名
  2016   加密后的md5值 张三
  2016   加密后的md5值      李武
  2019   加密后的md5值 老李

求大神, 这个脚本怎么写啊

作者: moperyblue    时间: 2017-01-11 14:25
本帖最后由 moperyblue 于 2017-01-11 18:24 编辑
  1. awk 'NR>1{cmd="echo -n "$2"|md5sum|cut -d\x22 \x22 -f1";cmd|getline $2;close(cmd)}1' a.txt
复制代码

作者: reyleon    时间: 2017-01-11 14:38
  1. awk 'NR>1{cmd=sprintf("printf %s|md5sum",$2);cmd|getline v;split(v,a);$2=a[1];close(cmd)}1' file
复制代码

作者: sunzhiguolu    时间: 2017-01-11 15:21
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use utf8;

  5. binmode (STDOUT, ':encoding(utf8)');

  6. while (<DATA>){
  7.     my @aT = split;
  8.     my ($md5) = @{[split ' ', `echo $aT[1] | md5sum -t`]};
  9.     print join ("\t", $aT[0], $md5, $aT[-1]), "\n";
  10. }

  11. __DATA__
  12. 2016   123 张三
  13. 2016   234  李武
  14. 2019   222 老李
复制代码

作者: wzl189189    时间: 2017-01-11 17:27
回复 2# moperyblue
你和   reyleon  你们2个加密结果咋不一样啊,如果是  md5加密,应该一样的结果啊


作者: wzl189189    时间: 2017-01-11 17:27
回复 3# reyleon

你和 楼上 moperyblue   两个人算出来的md5的值不一样啊,为啥啊?

作者: moperyblue    时间: 2017-01-11 17:36
回复 5# wzl189189


  1. echo 123|md5sum
  2. ba1f2511fc30423bdbb183fe33f3dd0f  -
复制代码

作者: wzl189189    时间: 2017-01-11 17:45
回复 7# moperyblue
奇怪了,我用java  的md5加密是: 202CB962AC59075B964B07152D234B70  咋和你的不一样啊?

作者: cao627    时间: 2017-01-11 17:50
echo -n "123" 和 echo "123" 的区别
既然是行上的第二字段,是不包含换行符号的,所以要用 echo -n
作者: wzl189189    时间: 2017-01-11 18:02
回复 7# moperyblue

谢谢了,如果a.txt 的文本分隔符是 tab键,或别的分隔符,我试了一下  awk  -F'\t', 用你这个脚本 就出错了,如果是分隔符,怎么改啊?

作者: wzl189189    时间: 2017-01-11 18:04
回复 7# moperyblue

如果a.txt  的分隔符是tab键,我用 awk -F'\t'   你这个脚本就错了,如果一定要填写分隔符,你这个咋优化下啊?  菜鸟请教下


作者: wzl189189    时间: 2017-01-11 18:04
回复 7# moperyblue

如果a.txt  的分隔符是tab键,我用 awk -F'\t'   你这个脚本就错了,如果一定要填写分隔符,你这个咋优化下啊?  菜鸟请教下

作者: wzl189189    时间: 2017-01-11 18:05
回复 2# moperyblue

如果a.txt  的分隔符是tab键,我用 awk -F'\t'   你这个脚本就错了,如果一定要填写分隔符,你这个咋优化下啊?  菜鸟请教下

作者: wzl189189    时间: 2017-01-11 18:05
回复 2# moperyblue

如果a.txt  的分隔符是tab键,如果一定要填写分隔符,你这个咋优化下啊?  菜鸟请教下

作者: moperyblue    时间: 2017-01-11 18:30
回复 14# wzl189189

分隔符是tab也没没问题.先确认a.txt里的数据是不是都以tab分隔
head a.txt|cat -A
  1. awk -F'\t' 'NR>1{cmd="echo -n "$2"|md5sum|cut -d\x22 \x22 -f1";cmd|getline $2;close(cmd)}1' a.txt
复制代码



作者: wzl189189    时间: 2017-01-11 19:15
回复 15# moperyblue

不好意思,这个系统有问题,回复你的时候,如果在awk后加上-f,就无法提交,老是报错,按你这样还是错的,结果是第四列全是: d41d8cd98f00b204e9800998ecf8427e


作者: moperyblue    时间: 2017-01-11 19:29
本帖最后由 moperyblue 于 2017-01-11 19:30 编辑

回复 16# wzl189189


你提供的数据只有三列?
作者: moperyblue    时间: 2017-01-11 19:33
more a.txt
  1. 日期    卡号    姓名
  2. 2016    123     张三
  3. 2016    234     李武
  4. 2019    222     老李f
  5. 2019    222     老李g
复制代码

cat -A a.txt
  1. M-fM-^WM-%M-fM-^\M-^_^IM-eM-^MM-!M-eM-^OM-7^IM-eM-'M-^SM-eM-^PM-^M$
  2. 2016^I123^IM-eM-<M- M-dM-8M-^I$
  3. 2016^I234^IM-fM-^]M-^NM-fM--M-&$
  4. 2019^I222^IM-hM-^@M-^AM-fM-^]M-^Nf$
  5. 2019^I222^IM-hM-^@M-^AM-fM-^]M-^Ng$
复制代码

awk -F'\t' 'NR>1{cmd="echo -n "$2"|md5sum|cut -d\x22 \x22 -f1";cmd|getline $2;close(cmd)}1' a.txt
  1. 日期    卡号    姓名
  2. 2016 202cb962ac59075b964b07152d234b70 张三
  3. 2016 289dff07669d7a23de0ef88d2f7129e7 李武
  4. 2019 bcbe3365e6ac95ea2c0343a2395834dd 老李f
  5. 2019 bcbe3365e6ac95ea2c0343a2395834dd 老李g
复制代码

作者: sditmaner    时间: 2017-01-12 15:24
回复 5# wzl189189
作者: wzl189189    时间: 2017-01-12 18:13
回复 18# moperyblue

  感谢,试了没有问题了,膜拜中!!!!





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2