我有一个具有以下格式的文件:
Value1 = Value1 <Value1>
Value2 = Value2 <Value2>
value3 = Value3 <Value3>
我想编写一个脚本,将每行中的第一个Value
字段作为输入并计算其哈希值,然后将其写入{{1}右侧的相应字段中} 标志。我所有的输入值都是明文。
这样我最终得到这样的东西:
=
到目前为止,我已经使用了以下帮助:
Value1 = 7EE5A281B28D7CA1FAB06B43D0B7D8AC <7EE5A281B28D7CA1FAB06B43D0B7D8AC>
Value2 = 0FE13ED1638DA4D4B1EF316729F3BB32 <0FE13ED1638DA4D4B1EF316729F3BB32>
Value3 = 121BCEF76AA7694F7D8EF4D381B86DAD <121BCEF76AA7694F7D8EF4D381B86DAD>
它将以下内容写入我的输出文件:
awk '{cmd=sprintf("echo -n \"%s\"|md5sum",$3);
cmd|getline $3;close(cmd)}7' file
这几乎是完整的解决方案,但我需要将哈希复制到“ <>”字符之间以及之前的值字段中(这是一个电子邮件地址字段,但我可以将其替换为用户名哈希我的情况)。我还需要在要删除的字段之间写上“-”字符。
我如何才能使其完美工作?
谢谢
答案 0 :(得分:0)
假设您将执行md5哈希,此gawk单行代码为您提供了一个开始:
awk '{cmd=sprintf("echo -n \"%s\"|md5sum",$3);
cmd|getline $3;close(cmd)}7' file
答案 1 :(得分:0)
也许是这样的:
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