我有一个文件格式如下:
Value1 = Value1 <Value1>
Value2 = Value2 <Value2>
value3 = Value3 <Value3>
我想编写一个脚本,将每行中的第一个Value
字段作为输入并计算它的哈希值,然后将其写入=
符号右侧的相应字段。我的所有输入值都是明文。
所以我最终得到这样的东西:
Value1 = 7EE5A281B28D7CA1FAB06B43D0B7D8AC <7EE5A281B28D7CA1FAB06B43D0B7D8AC>
Value2 = 0FE13ED1638DA4D4B1EF316729F3BB32 <0FE13ED1638DA4D4B1EF316729F3BB32>
Value3 = 121BCEF76AA7694F7D8EF4D381B86DAD <121BCEF76AA7694F7D8EF4D381B86DAD>
到目前为止,我已经使用了以下帮助:
awk '{cmd=sprintf("echo -n \"%s\"|md5sum",$3);
cmd|getline $3;close(cmd)}7' file
它将以下内容写入我的输出文件:
Value1 = 7EE5A281B28D7CA1FAB06B43D0B7D8AC - <value1>
这几乎是完整的解决方案,但我需要将哈希值复制到“<>”字符之间以及之前的值字段(这是一个电子邮件地址字段,但我可以用我的情况下的用户名哈希替换它) 。我还需要在要删除的字段之间写入“ - ”字符。
我怎样才能让它完美地运作?
谢谢
也许是这样的:
awk '{cmd="echo -n " $3 " | md5sum"; if( (cmd | getline md5) > 0 ) {close(cmd);sub(/ .*/,"",md5);md5=toupper(md5)};$3=md5;$4="<" md5 ">";}1' file
Value1 = 7EE5A281B28D7CA1FAB06B43D0B7D8AC <7EE5A281B28D7CA1FAB06B43D0B7D8AC>
Value2 = 0FE13ED1638DA4D4B1EF316729F3BB32 <0FE13ED1638DA4D4B1EF316729F3BB32>
value3 = 121BCEF76AA7694F7D8EF4D381B86DAD <121BCEF76AA7694F7D8EF4D381B86DAD>
鉴于<>
内外的价值保证相同......
如果你安装了ruby
,这里有一个丑陋但可能更有效的方法:
ruby -rdigest -lane 'md5=Digest::MD5.hexdigest($F[2]).upcase;$F[2]=md5;$F[3]="<" + md5 + ">"; print $F.join " "' file
假设你会做一个md5哈希,这个gawk one-liner给你一个开始:
awk '{cmd=sprintf("echo -n \"%s\"|md5sum",$3);
cmd|getline $3;close(cmd)}7' file