awk用哈希值替换列

Ami*_*mir 8 shell awk sed

如何在awk或sed中用哈希值(如MD5)替换列?

原始文件非常庞大,所以我需要这个非常有效.

lar*_*sks 5

所以,你并不是真的想用 来做这件事awk。任何流行的高级脚本语言——Perl、Python、Ruby 等——都会以更简单、更健壮的方式完成此任务。话虽如此,这样的事情会起作用。

给定这样的输入:

this is a test
Run Code Online (Sandbox Code Playgroud)

(例如,一行有四列),我们可以用它的 md5 校验和替换给定的列,如下所示:

awk '{
    tmp="echo " $2 " | openssl md5 | cut -f2 -d\" \""
tmp | getline cksum
$2=cksum
print
}' < sample 
Run Code Online (Sandbox Code Playgroud)

这依赖于 GNU awk(在 Linux 系统上默认情况下您可能会使用它),并且它用于openssl生成 md5 校验和。我们首先构建一个 shell 命令行,tmp将选定的列传递给md5命令。然后我们将输出通过管道传输到cksum变量中,并用校验和替换第 2 列。给定上面的示例输入,该 awk 脚本的输出将是:

this 7e1b6dbfa824d5d114e96981cededd00 a test
Run Code Online (Sandbox Code Playgroud)


Ami*_*mir 5

我复制粘贴了 larsks 的回复,但我添加了关闭行,以避免出现本文中指出的问题: gawk / awk:管道日期到 getline *有时*不起作用

awk '{
    tmp="echo " $2 " | openssl md5 | cut -f2 -d\" \""
tmp | getline cksum
close(tmp)
$2=cksum
print
}' < sample 
Run Code Online (Sandbox Code Playgroud)