有这个文本文件:
name, age
joe,42
jim,20
bob,15
mike,24
mike,15
mike,54
bob,21
试图得到这个(计数):
joe 1
jim 1
bob 2
mike 3
谢谢,
$ awk -F, 'NR>1{arr[$1]++}END{for (a in arr) print a, arr[a]}' file.txt
joe 1
jim 1
mike 3
bob 2
-F,
分裂,
NR>1
处理第 1 行之后的行arr[$1]++
以第一列为键递增数组arr
(用 拆分),
END{}
块在处理文件结束时执行for (a in arr)
arr
用a
key迭代print a
用键打印键, arr[a]
数组a
剥离标题行,删除年龄字段,将相同的名称组合在一起(排序),计算相同的运行次数,以所需的格式输出。
tail -n +2 txt.txt | cut -d',' -f 1 | sort | uniq -c | awk '{ print $2, $1 }'
输出
bob 2
jim 1
joe 1
mike 3
看起来你想要排序的输出。您可以简单地通过管道或打印到sort -nk 2
:
awk -F, 'NR>1 { a[$1]++ } END { for (i in a) print i, a[i] | "sort -nk 2" }' file
结果:
jim 1
joe 1
bob 2
mike 3
但是,如果您已GNU awk
安装,则可以在没有 coreutils 的情况下执行排序。这是将数组按其值排序的单进程解决方案。解决方案仍然应该很快。像这样运行:
awk -f script.awk file
内容script.awk
:
BEGIN {
FS=","
}
NR>1 {
a[$1]++
}
END {
for (i in a) {
b[a[i],i] = i
}
n = asorti(b)
for (i=1;i<=n;i++) {
split (b[i], c, SUBSEP)
d[++x] = c[2]
}
for (j=1;j<=n;j++) {
print d[j], a[d[j]]
}
}
结果:
jim 1
joe 1
bob 2
mike 3
或者,这是单线:
awk -F, 'NR>1 { a[$1]++ } END { for (i in a) b[a[i],i] = i; n = asorti(b); for (i=1;i<=n;i++) { split (b[i], c, SUBSEP); d[++x] = c[2] } for (j=1;j<=n;j++) print d[j], a[d[j]] }' file
严格的 awk 解决方案...
BEGIN { FS = "," }
{ ++x[$1] }
END { for(i in x) print i, x[i] }
如果name, age
确实在文件中,您可以调整 awk 程序以忽略它...
BEGIN { FS = "," }
/[0-9]/ { ++x[$1] }
END { for(i in x) print i, x[i] }
我根据此处的答案提出了两个功能:
topcpu() {
top -b -n1 \
| tail -n +8 \
| awk '{ print $12, $9, $10 }' \
| awk '{ CPU[$1] += $2; MEM[$1] += $3 } END { for (k in CPU) print k, CPU[k], MEM[k] }' \
| sort -k3 -n \
| tail -n 10 \
| column -t \
| tac
}
topmem() {
top -b -n1 \
| tail -n +8 \
| awk '{ print $12, $9, $10 }' \
| awk '{ CPU[$1] += $2; MEM[$1] += $3 } END { for (k in CPU) print k, CPU[k], MEM[k] }' \
| sort -k2 -n \
| tail -n 10 \
| column -t \
| tac
}
$ topcpu
chrome 0 75.6
gnome-shell 6.2 7
mysqld 0 4.2
zsh 0 2.2
deluge-gtk 0 2.1
Xorg 0 1.6
scrcpy 0 1.6
gnome-session-b 0 0.8
systemd-journal 0 0.7
ibus-x11 6.2 0.7
$ topmem
top 12.5 0
Xorg 6.2 1.6
ibus-x11 6.2 0.7
gnome-shell 6.2 7
chrome 6.2 74.6
adb 6.2 0.1
zsh 0 2.2
xdg-permission- 0 0.2
xdg-document-po 0 0.1
xdg-desktop-por 0 0.4
请享用!
猫文件.txt | 剪切-d',' -f 1 | 排序 | 唯一的-c
2 bob
1 jim
1 joe
3 mike