0
我試圖輸出製表符分隔的結果,該結果使用製表符分隔的文件中的數據組合並減去特定的行。awk使用另一個序列號來調整匹配字段的座標
如果在每行$4
匹配則第一匹配順序$6
值被添加到$2
,除非值1
,則使用原始$2
(如在第1行的情況下)。這是新的或經調整的$2
值。
最後一個匹配連續的$6
值被添加到$2
,這是新的或調整後的$3
值。
新$2
和$3
瓦萊斯在格式$1
與$1
組合:$2
- $3
和$5
值被印刷在線路。
只要$4
的值是唯一的,下面的awk
命令就很好,但情況並非總是如此。我似乎無法添加條件 ,檢查$6
並且如果數字不是連續的(1 2是,但之後在92 93 94之間有中斷),那麼當有新的線路中斷時。
也許有另一種方式,但希望這有助於。謝謝:)
文件
chrX 110956442 110956535 chrX:110956442-110956535 ALG13 1 19
chrX 110956442 110956535 chrX:110956442-110956535 ALG13 2 19
chrX 110956442 110956535 chrX:110956442-110956535 ALG13 92 18
chrX 110956442 110956535 chrX:110956442-110956535 ALG13 93 18
chrX 110956442 110956535 chrX:110956442-110956535 ALG13 94 18
chrX 110961329 110961512 chrX:110961329-110961512 ALG13 2 1
chrX 110961329 110961512 chrX:110961329-110961512 ALG13 3 1
chrX 25031028 25031925 chrX:25031028-25031925 ARX 651 3
所需的輸出
chrX:110956442-110956444 ALG13
chrX:110956534-110956536 ALG13
chrX:110961331-110961332 ALG13
chrx:25031679-25031679 ARX
AWK
awk 'FNR==NR {S[$4]++;next} ($4 in S){if(S[$4]>1){print $1 OFS $2 OFS $2+S[$4] OFS $5;}
else {if($6==1){print $1 OFS $2 OFS $2 OFS $5}
else {print $1 OFS $2+$6 OFS $2+$6 OFS $5}};delete S[$4]}' file file
電流輸出
chrX 110956442 110956449 ALG13
chrX 110961329 110961334 ALG13
chrX 25031028 25031031 ARX
最初未經調整的'$ 2'座標是'110956442',所以'92'被添加到這個給你新的'110956534'調整的$ 2'座標。 '94'是原始未調整的'$ 2'座標,給你新的'110956536'調整的$ 3'座標。休息之後的第一個連續數字被添加到'$ 2',並且休息之前的最後一個連續數字被添加到'$ 2'以便獲得調整後的座標。非常感謝你 :)。 – Chris
'awk'非常接近完美,因爲'$ 6 == 1'是原始'$ 1'的值,所以'chrX:110956442-110956535'應該被調整爲'chrX:110956442-110956444 ALG13'用來。非常感謝你 :)。 – Chris
目前它是'chrX:110956443-110956444 \t ALG13',我認爲要調整的行是'first_stop =($ 6 == 1)? 0:6美元;',但似乎並不是這樣。謝謝 :)。 – Chris