基础文本统计 - 使用 awk
# 统计文件每行第一个字段的出现次数
awk '{count[$1]++} END {for (word in count) print word, count[word]}' filename.txt
# 按第二列分组,统计第三列的总和
awk '{sum[$2] += $3; count[$2]++} END {for (key in sum) print key, sum[key], count[key]}' data.txt
使用 sort + uniq 组合
# 按第一列分组统计
awk '{print $1}' filename.txt | sort | uniq -c | sort -rn
# 按分隔符分组(例如逗号分隔的CSV)
cut -d',' -f2 data.csv | sort | uniq -c
Python 脚本实现
#!/usr/bin/env python3
# 文件名:group_stats.py
import sys
from collections import Counter, defaultdict
def basic_group_count(filename, column=0):
"""基础分组计数"""
counter = Counter()
with open(filename, 'r') as f:
for line in f:
if line.strip():
fields = line.split()
if len(fields) > column:
counter[fields[column]] += 1
# 按计数降序输出
for key, count in counter.most_common():
print(f"{key}: {count}")
def sum_by_group(filename, group_col=0, value_col=1):
"""分组求和"""
groups = defaultdict(float)
with open(filename, 'r') as f:
for line in f:
if line.strip():
fields = line.split()
if len(fields) > max(group_col, value_col):
key = fields[group_col]
value = float(fields[value_col])
groups[key] += value
for key, total in sorted(groups.items(), key=lambda x: x[1], reverse=True):
print(f"{key}: {total:.2f}")
def multi_field_stats(filename):
"""多字段分组统计"""
from collections import defaultdict
data = defaultdict(lambda: {'count': 0, 'sum': 0, 'values': []})
with open(filename, 'r') as f:
for line in f:
if line.strip():
fields = line.strip().split(',')
if len(fields) >= 3:
group_key = f"{fields[0]}-{fields[1]}"
data[group_key]['count'] += 1
try:
data[group_key]['sum'] += float(fields[2])
data[group_key]['values'].append(float(fields[2]))
except ValueError:
pass
# 输出统计结果
print("分组统计结果:")
print(f"{'分组':<15} {'数量':<8} {'总和':<10} {'平均值':<10}")
print("-" * 45)
for key, stats in sorted(data.items()):
avg = stats['sum'] / stats['count'] if stats['count'] > 0 else 0
print(f"{key:<15} {stats['count']:<8} {stats['sum']:<10.2f} {avg:<10.2f}")
if __name__ == "__main__":
if len(sys.argv) < 2:
print("用法: python group_stats.py <文件名>")
print("示例: python group_stats.py data.txt")
sys.exit(1)
filename = sys.argv[1]
# 基本分组计数(按第一列)
print("=== 基本分组计数 ===")
basic_group_count(filename)
# 分组求和(按第一列分组,第二列求和)
print("\n=== 分组求和 ===")
sum_by_group(filename, 0, 1)
高级统计脚本
#!/usr/bin/env python3
# 文件名:advanced_stats.py
import pandas as pd
import sys
def csv_group_stats(filename):
"""使用pandas进行CSV文件分组统计"""
try:
df = pd.read_csv(filename)
print("文件字段:", list(df.columns))
# 按第一列分组统计
group_col = df.columns[0]
value_col = df.columns[1]
print(f"\n按'{group_col}'分组统计'{value_col}':")
stats = df.groupby(group_col)[value_col].agg([
'count', 'sum', 'mean', 'std', 'min', 'max'
]).round(2)
print(stats)
# 按多列分组
if len(df.columns) >= 3:
print(f"\n按'{group_col}'和'{df.columns[1]}'分组统计:")
multi_stats = df.groupby([group_col, df.columns[1]])[df.columns[-1]].agg([
'count', 'sum', 'mean'
]).round(2)
print(multi_stats)
except Exception as e:
print(f"错误: {e}")
def main():
if len(sys.argv) < 2:
print("用法: python advanced_stats.py <文件名>")
print("支持CSV格式文件")
sys.exit(1)
# 检查是否为CSV文件
if sys.argv[1].endswith('.csv'):
csv_group_stats(sys.argv[1])
else:
# 普通文本文件
with open(sys.argv[1], 'r') as f:
lines = f.readlines()
# 自动检测分隔符
first_line = lines[0].strip() if lines else ""
if ',' in first_line:
sep = ','
elif '\t' in first_line:
sep = '\t'
else:
sep = None
print(f"检测到分隔符: {repr(sep)}")
# 处理数据
data = []
for line in lines:
if line.strip():
if sep:
data.append(line.strip().split(sep))
else:
data.append(line.strip().split())
if data:
df = pd.DataFrame(data)
csv_group_stats(pd.DataFrame.to_csv(df, index=False))
if __name__ == "__main__":
main()
快捷命令行脚本
#!/bin/bash
# 文件名:group_count.sh
file="${1:-data.txt}"
col="${2:-1}" # 默认第一列
echo "正在分析文件: $file"
echo "分组列: 第 $col 列"
echo ""
# 方法1:使用 awk
echo "=== awk 分组统计 ==="
awk -v col=$col '{count[$col]++} END {for (key in count) printf "%s\t%d\n", key, count[key]}' "$file" | sort -k2 -rn
echo ""
echo "=== 方法2:sort + uniq ==="
awk -v col=$col '{print $col}' "$file" | sort | uniq -c | sort -rn | awk '{printf "%s\t%d\n", $2, $1}'
# 可选:添加统计数据
echo ""
echo "=== 汇总信息 ==="
awk -v col=$col '{count[$col]++} END {total=0; for (key in count) total+=count[key]; print "总记录数:", total, "分组数:", length(count)}' "$file"
使用示例
-
准备数据文件
data.txt:
apple 10 red banana 20 yellow apple 15 red orange 8 orange banana 12 yellow apple 5 red -
运行脚本:
# 基本统计 python group_stats.py data.txt
或者使用命令行
bash group_count.sh data.txt 1
3. **输出示例**:
=== 基本分组计数 === apple: 3 banana: 2 orange: 1
=== 分组求和 === apple: 30 banana: 32 orange: 8
这些脚本可以根据你的具体需求进行调整,支持各种分隔符、多级分组和聚合统计。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播