作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个文件:
1 Chr1 100820415
1 Chr1 100821817
1 Chr1 100821818
1 Chr1 100823536
1 Chr1 100824427
2 Chr1 100824427
2 Chr1 100824427
1 Chr1 100824428
如果所有第 2 列和第 3 列的值都相同,我将尝试添加第 1 列的值。这有点像“集群”。
所以输出应该是:
1 Chr1 100820415
1 Chr1 100821817
1 Chr1 100821818
1 Chr1 100823536
5 Chr1 100824427
1 Chr1 100824428
我是 awk
的新手,正在尝试理解这门语言,但是我不能说写一个脚本 if $2 is same then add $1 and if $2 is same then add $3值(如果 $3 值相同)
。
到目前为止,这是我尝试过的:
awk 'BEGIN{ x+=$1 } END {print x} if NF == $2' file_name
解决方案可以是 awk
或 python
。
最佳答案
awk
的一种方式:
$ awk '{a[$2 OFS $3]+=$1}END{for(k in a)print a[k],k}' file
1 Chr1 100821817
1 Chr1 100821818
1 Chr1 100820415
5 Chr1 100824427
1 Chr1 100824428
1 Chr1 100823536
使用 python
的一种方法:
$ cat cluster.py
#!/usr/bin/env python
import fileinput
cluster = {}
for line in fileinput.input():
field = line.strip().split()
try:
cluster[' '.join(field[1:])] += int(field[0])
except KeyError:
cluster[' '.join(field[1:])] = int(field[0])
for key, value in cluster.items():
print value, key
使脚本可执行 chmod +x cluster.py
并像这样运行:
$ ./cluster.py file
1 Chr1 100823536
1 Chr1 100821817
1 Chr1 100820415
5 Chr1 100824427
1 Chr1 100824428
1 Chr1 100821818
这两种方法通过利用哈希表使用相同的技术。对于 awk
,我们使用关联数组,而 python 使用字典。简单地说,两者都是数组,其中的键不是数字而是字符串(第二和第三列值)。一个简单的例子:
blue 1
blue 2
red 5
blue 1
red 2
如果我们说 awk '{a[$1]+=$2}' file
然后我们得到以下内容:
Line Array Value Explanation
1 a["blue"] 1 # Entry in 'a' is created with key $1 and value $2
2 a["blue"] 3 # Add $2 on line 2 to a["blue"] so the new value is 3
3 a["blue"] 3 # The key $1 is red so a["blue"] does not change
a["red"] 5 # Entry in 'a' is created with new key "red"
4 a["blue"] 4 # Key "blue", Value 1, 1 + 3 = 4
a["red"] 5 # Key "blue", so a["red"] doesn't change
5 a["blue"] 4 # Key "red", so a["blue"] doesn't change
a["red"] 7 # Key "red", Value 2, 5 + 2 = 7
关于python - awk 中的聚类或分组帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19143216/
我是一名优秀的程序员,十分优秀!