我有很多类似的行:
Jasmine、Kellyn、Shelly;Applebees
莎拉;沃尔玛
海伦、马克斯、萨姆;戴尔
这些名字中有很多是重复的。我需要找出使用最多的 10 个名字。我一直在尝试使用 cut -d"," restaurants.txt | sort | uniq -c | sort -rn | head -n 10
答案1
好吧,这并不漂亮,但至少它有效。
cat restaurants.txt | sed 's/;.*//' | tr "," "\n" | tr " " "\n" | grep -v '^$' | sort | uniq -c | sort -r
2 Sam
2 Max
1 Shelly
1 Sarah
1 Kellyn
1 Jasmine
1 Helen
说明:
sed 's/;.*//'
删除分号后的所有文本,如 (; Applebees)
tr "," "\n"
uniq 仅适用于每行,因此请用新行替换逗号
tr " " "\n"
清除多余的空格,让它们单独占一行(可选)
grep -v '^$'
删除所有空行
sort
排序
uniq -c
计数重复项
sort -f
按降序排列