awk和md5:替换列 [英] awk and md5: replace a column

查看:92
本文介绍了awk和md5:替换列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

开始,将awk替换为其哈希值,我尝试对(md5)数字列表进行哈希处理:

Starting from Awk replace a column with its hash value, I tried to hash(md5) a list of numbers:

$ cat -n file
 1  40755462755
 2  40751685373
 3  40730094339
 4  40722740446
 5  40722740446
 6  40743802204
 7  40730094339
 8  40745188886
 9  40740593352
10  40745561530

如果我运行:

cat file | awk '{cmd="echo -n " $1 " | md5sum|cut -d\" \" -f1"; cmd|getline md5; $1=md5;print;}' | cat -n
 1  29ece26ce4633b6e9480255db194cc40
 2  120148eca0891d0fc645413d0f26b66b
 3  cafc48d392a004f75b669f9d1d7bf894
 4  7b4367e8f58835c0827dd6a2f61b7258
 5  7b4367e8f58835c0827dd6a2f61b7258
 6  49b12d1f3305ab93b33b330e8b1d3165
 7  49b12d1f3305ab93b33b330e8b1d3165
 8  bee44c89ac9d4e8e4e1f1c5c63088c71
 9  f07262ac8f53755232c5abbf062364d0
10  2ac7c22170c00a3527eb99a2bfde2c2c

我不知道为什么第7行与第6行获得相同的md5,因为如果我分别运行它们,它们是不同的:

I don't know why the line 7 get the same md5 as line 6 because if I run them separately they are different:

$ echo -n 40743802204 | md5sum|cut -d" " -f1
49b12d1f3305ab93b33b330e8b1d3165
$ echo -n 40730094339 | md5sum|cut -d" " -f1
cafc48d392a004f75b669f9d1d7bf894

我尝试了一些打印:

cat file| awk '{print $0,NF,NR;cmd="echo -n " $1 " | md5sum|cut -d\" \" -f1"; cmd|getline md5; $1=md5"---"cmd"---"$1;print;}' | cat -n

但没有成功找到问题所在.

but with no success to find what's going wrong.

如标题所述,我尝试替换文件(具有100个字段的文件)中的列.因此,一个文件$ 1将为$ 24,NF为另一个文件将为233.

As the title says, I try to replace a column in a file(a file with hundred fields). So, $1 would be $24 and NF would be 120 for a file and 233 for another file.

推荐答案

好,我发现了问题.awk中的管道应关闭.所以,我需要一个 close(cmd);

Ok, I found the issue. The pipes in awk should be closed. So, I needed a close(cmd);

我在此处

这篇关于awk和md5:替换列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆