shell、python 统计两列数据中每一类别的总数目
001、shell实现
[root@pc1 test2]# ls a.txt [root@pc1 test2]# cat a.txt ## 测试数据 a 8 b 3 a 9 a 2 b 3 c 7 c 2 c 10 [root@pc1 test2]# for i in a b c; do grep $i a.txt | awk -v a=$i '{sum += $2} END {print a, sum}'; done a 19 b 6 c 19
002、python 实现
[root@pc1 test2]# ls a.txt test.py [root@pc1 test2]# cat a.txt ## 测试数据 a 8 b 3 a 9 a 2 b 3 c 7 c 2 c 10 [root@pc1 test2]# cat test.py ## 测试python程序 #!/usr/bin/python import sys in_file = open(sys.argv[1], "r") out_file = open(sys.argv[2], "w") lines = in_file.readlines() from collections import defaultdict dict1 = defaultdict(int) for i in lines: i = i.split(" ") dict1[i[0]] += int(i[1]) for i,j in dict1.items(): out_file.write(i + ": ") out_file.write(str(j) + "\n") in_file.close() out_file.close()
[root@pc1 test2]# ls a.txt test.py [root@pc1 test2]# python test.py a.txt result.txt ## 执行程序 [root@pc1 test2]# ls a.txt result.txt test.py [root@pc1 test2]# cat result.txt ## 程序运行结果 a: 19 b: 6 c: 19
003、python2
[root@pc1 test2]# ls a.txt test.py [root@pc1 test2]# cat a.txt ## 测试数据 a 8 b 3 a 9 a 2 b 3 c 7 c 2 c 10 [root@pc1 test2]# cat test.py ## 测试程序 #!/usr/bin/python import sys in_file = open(sys.argv[1], "r") out_file = open(sys.argv[2], "w") lines = in_file.readlines() dict1 = {} for i in lines: i = i.split(" ") if i[0] in dict1: dict1[i[0]] += int(i[1]) else: dict1[i[0]] = int(i[1]) for i,j in dict1.items(): out_file.write(i + ": ") print(str(j), file = out_file) in_file.close() out_file.close()
[root@pc1 test2]# ls a.txt test.py [root@pc1 test2]# python test.py a.txt b.txt ## 执行程序 [root@pc1 test2]# ls a.txt b.txt test.py [root@pc1 test2]# cat b.txt ## 程序执行结果 a: 19 b: 6 c: 19