有这个文本文件:
name, age
joe,42
jim,20
bob,15
mike,24
mike,15
mike,54
bob,21
试图得到这个(数):
joe 1
jim 1
bob 2
mike 3
谢谢,
答案 0 :(得分:66)
$ 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
print a
使用, arr[a]
密钥a
数组
答案 1 :(得分:24)
剥去标题行,删除年龄字段,将相同的名称组合在一起(排序),计算相同的运行次数,以所需的格式输出。
tail -n +2 txt.txt | cut -d',' -f 1 | sort | uniq -c | awk '{ print $2, $1 }'
输出
bob 2
jim 1
joe 1
mike 3
答案 2 :(得分:8)
看起来你想要排序输出。您可以直接管道或打印到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
答案 3 :(得分:4)
严格意义上的解决方案......
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] }
答案 4 :(得分:0)
我根据这里的答案提出了两个功能:
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
享受!
答案 5 :(得分:0)
cat file.txt |切-d','-f 1 |排序uniq -c
2 bob
1 jim
1 joe
3 mike