我有一個大型作業流程,它被未表征的染色體絆倒 - 一個程序產生一個計數矩陣,其中包含n 個用于規范染色體的欄位,對于具有未表征染色體的行,欄位為n 1和n 2。這是使用read.table()下游的一個令人頭疼的問題。
我的方法是首先確定n是什么,然后用它來分離包含這些未表征染色體的n 1和n 2行:
awk -v nf="$canon" 'NF!=nf{print}{}' matrix.txt | head
chr22 KI270733v1 random 123189 123362 6 4 8 0 0 10
chrUn GL000220v1 105951 106963 - 0 0 0 0 10 0
目標是通過連接第 1 列和第 2 列(其中n 1)和第 1、第 2 和第 3 列(其中n 2 )來匹配欄位數n:
chrUn-GL000220v1 105951 106963 - 0 0 0 0 10 0
chr22-KI270733v1-random 123189 123362 6 4 8 0 0 10
試圖
我可以對矩陣進行子集化并將其拆分為 3 個檔案,一個用于NF==n、NF==n 1 和 NF==n 2并加入列:
awk -v n="$canon" 'NF==n{print}{}' matrix.txt | head
chr1 15534236 15536814 - 0 10 0 0 0 3
(^ 無需操作)
awk -v n="$canon" 'NF==n 1{print}{}' matrix.txt | awk -v OFS="\t" '{print $1"-"$2,$3,$4,$5,$6,$7,$8,$9,$10}' | head
chrUn-GL000220v1 105992 107309 - 0 0 0 0 0 4
和
awk -v n="$canon" 'NF==n 2{print}{}' matrix.txt | awk -v OFS="\t" '{print $1"-"$2"-"$3,$4,$5,$6,$7,$8,$9,$10,$11,$12}' | head
chr22-KI270733v1-random 123189 123362 6 4 8 0 0 10
不幸的是,這個解決方案不是動態的——我必須指定列的范圍。在前四個詳細說明 Chr、Start、Stop、Strand 之后,作業流可以包含任意數量的列。
希望我已經很好地定義了問題,任何建議將不勝感激。
uj5u.com熱心網友回復:
嘗試:
awk -v n=13 '{ for (i = 2; i <= NF - n 1; i) { $1 = $1"-"$i; $i=""; } } 1'
收集$1并清理$i=""其余部分。
您還可以將值移動到左側if (NF != n) for (i = 2; i < NF; i) $i=$(i (NF-n))值并設定NF=n.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/445476.html
上一篇:xargs和cut:將csv的“cut”欄位轉換為bash變數
下一篇:在括號前提取字串并創建新行
