有没有办法使用 awk 总结单个标识符的第二个字段并用非数字替换输出?

mer*_*eri 3 shell awk delimiter

我有一个.txt文件:

a 10
b 13
a 2
b 5
c 1
Run Code Online (Sandbox Code Playgroud)

其中第一列用于标识符,第二列用于值。

如果我想使用 awk 浏览文件并对第一列中每个项目的第二列中的数字求和,然后在打印前用 * 替换它,这样输出如下,我该怎么做?

a : **
b : **
c : *
Run Code Online (Sandbox Code Playgroud)

使星数等于数字中的位数 (12 -> **, 18 -> **, 1 -> *)

awk '{gsub("12", "**"); print}' test.txt
Run Code Online (Sandbox Code Playgroud)

我试过了,但这当然不是正确的解决方案。打开任何建议。

anu*_*ava 8

你可以使用这个 awk:

awk '{sums[$1] += $2} END {for (i in sums) {
gsub(/./, "*", sums[i]); print i, ":", sums[i]}}' file

a : **
b : **
c : *
Run Code Online (Sandbox Code Playgroud)


Rav*_*h13 6

您能否尝试使用所示示例进行以下,编写和测试。

awk '
FNR==NR{
  arr[$1]+=$2
  next
}
($1 in arr){
  gsub(/./, "*", arr[$1])
  print $1, ":", arr[$1]
  delete arr[$1]
}
' Input_file Input_file
Run Code Online (Sandbox Code Playgroud)