gpt4 book ai didi

awk-1-liner 对 stdin 中的数字求和,同时打印某些文本的出现次数以及其他任意文本

转载 作者:行者123 更新时间:2023-12-01 14:46:03 25 4
gpt4 key购买 nike

我绝对有兴趣获得一本关于 awk 的书。尽管玩了很短的时间,但我还是被征服了。然而,与此同时,我有一个问题我怀疑我可以用 [g]awk 专门解决。为了演示,我将使用一些 fdisk 输出。在此示例中,所需的最终结果类似于:

Disks: 2 [240 GB total]
sda=120 GB
sdb=120 GB

这是我所拥有的:

fdisk -l 2>/dev/null | awk '/^Disk \/dev\/[vsh]d./ {bytes+=$5} END {print "Disks: "NR" ["; gb=bytes/1024/1024/1024; print gb" GB total]"}'

无论如何,我的 NR 显然在我的带有两个硬盘驱动器的笔记本电脑上打印出 73..。这个,我不明白。到目前为止,嗯..我可能已经完成了一半。任何提示或简洁的教程将不胜感激!


在两个主要的优秀答案之后,我得到了以下结果:

echo DISKS: $(fdisk -l 2>/dev/null | awk -F/ '/^Disk \/dev\/[vsh]d.|^Disk \/dev\/xvd./{print$3}' | awk '{d++;bytes+=$4;disk[$1]=$2" "$3}END{gb=bytes/1024/1024/1024; printf gb" GB total, "d" disks\n";for (i in disk) print "  "i,disk[i]}' | sed -e "s/,$/ /" -e "s/: / /")

这给了我这样的输出:

DISKS: 78.3585 GB total, 2 disks
sda 80.0 GB
sdb 4110 MB

期待有一天我可以在没有 sed 的情况下在一个 awk 命令中完成所有这些工作。 :) 但是现在,谢谢大家!

最佳答案

$ fdisk -l 2>/dev/null | awk '/^Disk \/dev\/[vsh]d./{d++;bytes+=$5;disk[$2]=$3$4} END {printf "Disks: "d" ["; gb=bytes/1024/1024/1024; printf gb" GB total]\n";for (i in disk) print i,disk[i]}'
Disks: 1 [93.1604 GB total]
/dev/sda: 100.0GB,

关于awk-1-liner 对 stdin 中的数字求和,同时打印某些文本的出现次数以及其他任意文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3367630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com