Awk 散列文本文件中每行的第一列,并将其写入文件的第三列

Awk 散列文本文件中每行的第一列,并将其写入文件的第三列,awk,sed,replace,hash,Awk,Sed,Replace,Hash,我有一个以下格式的文件: Value1 = Value1 <Value1> Value2 = Value2 <Value2> value3 = Value3 <Value3> 到目前为止,在以下帮助下,我使用了: awk '{cmd=sprintf("echo -n \"%s\"|md5sum",$3); cmd|getline $3;close(cmd)}7' file 将以下内容写入我的输出文件: Value1 = 7EE5A281B28D7C

我有一个以下格式的文件:

Value1 = Value1 <Value1>
Value2 = Value2 <Value2>
value3 = Value3 <Value3>
到目前为止,在以下帮助下,我使用了:

awk '{cmd=sprintf("echo -n \"%s\"|md5sum",$3); 
   cmd|getline $3;close(cmd)}7' file
将以下内容写入我的输出文件:

Value1 = 7EE5A281B28D7CA1FAB06B43D0B7D8AC - <value1>
Value1=7EE5A281B28D7CA1FAB06B43D0B7D8AC-
这几乎是完整的解决方案,但我需要将散列复制到“”字符之间以及之前的值字段(这是一个电子邮件地址字段,但在我的情况下,我可以将其替换为用户名散列)。我还需要删除字段之间似乎写入的“-”字符

我怎样才能让它完美地工作


谢谢

假设您要进行md5哈希,这一行代码让您有了一个开始:

awk '{cmd=sprintf("echo -n \"%s\"|md5sum",$3);
         cmd|getline $3;close(cmd)}7' file

假设您要进行md5哈希,下面的gawk one liner为您提供了一个开始:

awk '{cmd=sprintf("echo -n \"%s\"|md5sum",$3);
         cmd|getline $3;close(cmd)}7' file
也许是这样:

Value1 = 7EE5A281B28D7CA1FAB06B43D0B7D8AC <7EE5A281B28D7CA1FAB06B43D0B7D8AC>
Value2 = 0FE13ED1638DA4D4B1EF316729F3BB32 <0FE13ED1638DA4D4B1EF316729F3BB32>
Value3 = 121BCEF76AA7694F7D8EF4D381B86DAD <121BCEF76AA7694F7D8EF4D381B86DAD>
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>
也许是这样:

Value1 = 7EE5A281B28D7CA1FAB06B43D0B7D8AC <7EE5A281B28D7CA1FAB06B43D0B7D8AC>
Value2 = 0FE13ED1638DA4D4B1EF316729F3BB32 <0FE13ED1638DA4D4B1EF316729F3BB32>
Value3 = 121BCEF76AA7694F7D8EF4D381B86DAD <121BCEF76AA7694F7D8EF4D381B86DAD>
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>

你想要的哈希算法是什么?你试过什么?SHA或MD5都可以。我已经试着用awk检查每一行并打印第一列,但我不知道如何将其写入第二列请您的问题添加这些细节。展示你的努力,你尝试过的和失败的。我现在编辑以添加额外的细节,并讨论下面解决方案的进展。你想要的哈希算法是什么?你试过什么?SHA或MD5都可以。我已经试着用awk检查每一行并打印第一列,但我不知道如何将其写入第二列请您的问题添加这些细节。展示你的努力,你尝试过的和失败的。我现在编辑以添加额外的细节,并讨论以下解决方案的进展。这很有效,谢谢!我是否可以扩展它,将散列复制到我没有提到的最后一列(当前包含电子邮件)?所以我的值是1=7EE5A281B28D7CA1FAB06B43D0B7D8AC,它似乎还写了一个尾随的“-”字符。这可能是因为我之前忘记提到的最后一个字段。我对问题进行了编辑,以更好地说明我的意思。@combatrock我认为awk行非常简单,您能自己尝试更改一些内容吗?有100种方法可以删除最后一个
-
,您还可以连接字符串
”以覆盖最后一个字段。试试看,这很有效,谢谢!我是否可以扩展它,将散列复制到我没有提到的最后一列(当前包含电子邮件)?所以我的值是1=7EE5A281B28D7CA1FAB06B43D0B7D8AC,它似乎还写了一个尾随的“-”字符。这可能是因为我之前忘记提到的最后一个字段。我对问题进行了编辑,以更好地说明我的意思。@combatrock我认为awk行非常简单,您能自己尝试更改一些内容吗?有100种方法可以删除最后一个
-
,您还可以连接字符串
”以覆盖最后一个字段。试试看。