有一個 .bed 檔案。它有 4 列。首先包含染色體的數目。我需要撰寫一個 bash 腳本,獲取屬于特定染色體的每一行,然后在這些情況下從第三列中減去第二列(這給出了基因的長度),然后我需要計算平均長度這些基因(在同一條染色體上)。我必須對每條染色體都這樣做。
此代碼計算整個表的平均長度,但我需要在每個染色體上分別執行此操作。
`#!/bin/bash
input_bed=${1}
awk 'BEGIN {
FS="\t"
sum=0
}
{
sum =$3-$2
} END {
print sum / NR;
}' ${input_bed}
#Exiting
exit`
uj5u.com熱心網友回復:
您可以在行處理塊之前放置一個謂詞,然后它只會在滿足條件的輸入行上運行。將“1”交換為您正在研究的任何染色體。
input_bed=${1}
awk 'BEGIN {
FS="\t"
sum=0
}
$1 = "1"
{
sum =$3-$2
} END {
print sum / NR;
}' ${input_bed}
#Exiting
exit
或者,您可以通過將結果保存到關聯陣列來在一次運行中完成所有操作。
input_bed=${1}
awk 'BEGIN {
FS="\t"
}
{
sum[$1] =$3-$2
cnt[$1] =1
} END {
for (chromosome in cnt) {
print "Avg of Chromosome ", chromosome, " is" sum[chromosome] / cnt[chromosome];
}
}' ${input_bed}
#Exiting
exit
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/536804.html
標籤:狂欢嘘平均床
上一篇:給定第一行和最后一行以及子字串,如何從檔案中洗掉多行不同大小的文本塊?
下一篇:正則運算式、捕獲組和美元符號
