You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对sort|uniq -c输出的文件按城市汇总计数?

问题描述

我有一个通过command | sort | uniq -c生成的文件city.txt,实际内容如下:

1904 mumbaiXa
   1167 mumbaiXa
    830 mumbaiXb
    565 mumbaiXp
    424 delhiXn
    423 delhiXz

我需要按字符X拆分每行的第二个字段,统计每个城市对应的数字总和,预期输出类似:

mumbai 4466
delhi 847

尝试执行以下命令但未得到预期结果:

grep 'X' city.txt | awk '{print $2}' | awk -F 'X' '{print $1}' | sort | uniq -c
错误原因分析

你之前的命令逻辑有误:

  • 该命令仅提取了城市名,然后用sort | uniq -c统计城市名出现的次数,而非累加每行开头的数字。比如mumbaiXa出现2次,命令会把mumbai的计数算成2,而不是把1904和1167相加。
解决方案

使用awk直接完成拆分、累加和输出,一步到位:

awk '{split($2, city_part, "X"); total[city_part[1]] += $1} END {for (c in total) print c, total[c]}' city.txt

或者用字段分隔符简化写法:

awk -F'[ X]' '{total[$2] += $1} END {for (c in total) print c, total[c]}' city.txt

命令解释

  1. 遍历city.txt的每一行:
    • 以空格和X作为分隔符时,$1是每行开头的数字,$2是拆分后的城市名(比如mumbai)。
    • 用数组total存储每个城市的累加值,键为城市名,值为对应数字的总和。
  2. 所有行处理完成后(END块),遍历数组输出每个城市及其总计数。

内容的提问来源于stack exchange,提问作者shantanuo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 22:20:04