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

标签 shell awk delimiter

我有一个 .txt 文件:

a 10
b 13
a 2
b 5
c 1
其中第一列用于标识符,第二列用于值。
如果我想使用 awk 浏览文件并对第一列中每个项目的第二列中的数字求和,然后在打印前用 * 替换它,这样输出如下,我该怎么做?
a : **
b : **
c : *
使星数等于数字中的位数 (12 -> **, 18 -> **, 1 -> *)
awk '{gsub("12", "**"); print}' test.txt
我试过了,但这当然不是正确的解决方案。打开任何建议。

最佳答案

你可以使用这个 awk:

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

a : **
b : **
c : *

关于shell - 有没有办法使用 awk 总结单个标识符的第二个字段并用非数字替换输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66709762/

相关文章:

linux - Shell脚本中的杀进程

linux - 在 linux 中使用 while 循环一个一个地测试函数参数

shell - 在 shell 脚本中优化 grep(或使用 AWK)

java - 如何使用分隔符来隔离单词(Java)

java - 字符串的分隔符由多个正则表达式组成

python - 为什么在 Python 中,+= 和 -= 被视为分隔符?

shell - 如何仅删除存在的文件?

linux - 如何使用 sed 或 awk 迭代存储在变量中的 IP 地址并将这些 IP 地址放入文件中

linux - Bash 一行返回子字符串

bash - 使用AWK计算文件中字母的平均表达