基因测序的结果非常大,介绍一些直接在Linux服务器上操作的快速方法。
大家应该掌握基本的管道操作,for循环,以及zcat、cat、less、grep、cut、sed、paste、vi等命令。
- 根据数值、字符或者字符长度筛选行
Filter rows by column value
# 保留第7列小于0.05的行
awk '{ if ($7 < 0.05) { print } }' file
# 保留第7列为"0/1"的行
awk '{ if ($7 == "0/1") { print } }' file
# 保留第7列不为"0/1"的行
awk '{ if ($7 != "0/1") { print } }' file
# 保留第7列字符长度为1的行
awk '{ if (length($7) == 1) { print } }' file
###########
# 多个条件 #
###########
# 保留第7列小于0.05并且大于0.01的行
awk '{ if (($7 < 0.05) && ($7 > 0.01)) { print } }' file
# 保留第7列为"0/1"或者"1/1"的行
awk '{ if (($7 == "0/1") || ($7 == "1/1")) { print } }' file
2. 选取行
select rows by row number
# 选取第2行
sed -n '2,2p' file
# 选取第3行至第5行
sed -n '3,5p' file
3. 计算列和
calculate column sum
# 计算第11列的和
awk '{s+=$11}END{print s}' file
4. 修改某一列的值
replace strings in a column
# 将第11列中的'.'替换成'0/0'
awk 'BEGIN{FS=OFS="t"} {if ($11==".") $11="0/0"}1' file
5. 染色体排序
sort vcf or bed file
sort -k1,1 -k2,2n file
6. 将连续不知道几个空格替换成tab
replace blank with tab
sed 's/s+/t/g' file
7. 将换行符替换成;
sed ":a;N;s/n/;/g;ta" file
8. 每行重复
printf 'HelloWorldn%.0s' {1..5}
# 将HelloWorld重复5行
# HelloWorld
# HelloWorld
# HelloWorld
# HelloWorld
# HelloWorld
9. 从VCF中提取GT的信息
cat vcf_file | grep -v '##' | awk '
BEGIN { OFS = "t" }
NF > 2 && FNR > 1 {
for ( i=9; i<=NF; i++ ) {
split($i,a,":") ;$i = a[1];
}
}
{ print }
' > gt_file
10. 统计数目 count
# 统计文件中第10列不同item的数目
cat file | cut -f10 | sort | uniq -c
11. vcf中选出点前后增加1000bp用于截取bam之后的IGV查看
cat vcf | grep -v '#' | awk '{print $1 "t" ($2 - 1000) "t" ($2 + 1000)}'