尝试这个 :
awk -F"|" -v var="10" '
NR==1;
NR>1{
"echo "$2"|sha256sum" | getline shaoutput;
split(shaoutput, sha, " ");
print var, $2, $3, $4, $5, sha[1]
}' OFS="|" file
Output :
10|0001001010000026316|531849|1150|101|2e16abd9f3e3e368210b11faa5bfebdb6e001034b58cc9ad1c689dfd1f7eeacd
我更喜欢使用NR==1
and NR>1
因为它更具可读性。
NR==1;
可以,不需要添加{print}
For NR>1
, I use sha256sum
生成 sha 作为 awk 没有任何函数可以做到这一点(据我所知)。我将输出保存在shaoutput
变量,使用清理输出split
,然后打印需要的内容。
我不想将输出分隔符存储在var
多变的。
在 print 中使用逗号将使 awk 使用OFS
变量作为分隔符。
Edited
正如 Ed Morton 所建议的,一个改进的解决方案:
awk -v var="10" '
BEGIN{
FS=OFS="|"
}
NR==1;
NR>1{
shaoutput="";
cmd="echo \047" $2 "\047 | sha256sum" ;
if ( (cmd | getline line) > 0 ){
shaoutput=line
close(cmd)
}
split(shaoutput, sha, " ");
print var, $2, $3, $4, $5, sha[1];
}' file