我在第二個欄位中有一個帶有 rsID 的大檔案。
一些變體采用這種格式:chr1-97981343:rs55886062-AT
使用 bash 命令,如何替換這些識別符號以僅列印 rsID(例如 rs55886062)?
玩具資料集:
1 rs3918290 110 97915614 A G
1 chr1-97981343:rs55886062-AT 110 97981343 A T
1 rs72549303 110 97915622 C A
1 rs17376848 110 97915624 G A
1 rs59086055 110 97915746 A G
所需的輸出:
1 rs3918290 110 97915614 A G
1 rs55886062 110 97981343 A T
1 rs72549303 110 97915622 C A
1 rs17376848 110 97915624 G A
1 rs59086055 110 97915746 A G
uj5u.com熱心網友回復:
如果變體格式始終使用 and 進行結構化:,-并且您不介意調整檔案的空格,則可以執行以下操作:
awk 'split($2, a, ":") && a[2]{ split(a[2], b, "-"); $2 = b[1] }{$1 = $1}1' input
uj5u.com熱心網友回復:
更多樣本將有助于構建正則運算式模式。這是一種可能的解決方案:
$ sed -E 's/\<chr[0-9] -[0-9] :(rs[0-9] )-[A-Z] /\1/' ip.txt
1 rs3918290 110 97915614 A G
1 rs55886062 110 97981343 A T
1 rs72549303 110 97915622 C A
1 rs17376848 110 97915624 G A
1 rs59086055 110 97915746 A G
\<詞錨的開始chr[0-9] -[0-9] :匹配chr后跟一位或多位數字后跟-一位或多位數字后跟:(rs[0-9] )捕獲rs后跟一位或多位數字-[A-Z]匹配-后跟一個或多個大寫字符
uj5u.com熱心網友回復:
以下sed命令可能會有所幫助
sed -E 's/[^[:blank:]]*(rs[0-9] )[^[:blank:]]*/\1/' file
uj5u.com熱心網友回復:
輸入檔案在這里稱為“堆疊”。
#!/bin/sh -x
cat stack | tr -s ' ' | tr ' ' ' ' > s1
mv s1 stack
next () {
[[ -s stack ]] && main
exit 0
}
main () {
line=$(sed -n '1p' stack)
f1=$(echo "${line}" | cut -d' ' -f1)
f2=$(echo "${line}" | cut -d' ' -f2)
f3=$(echo "${line}" | cut -d' ' -f3)
f4=$(echo "${line}" | cut -d' ' -f4)
f5=$(echo "${line}" | cut -d' ' -f5)
f6=$(echo "${line}" | cut -d' ' -f6)
branch1 () {
nf2=$(echo "${f2}" | cut -d':' -f2 | sed 's@\-AT@@')
echo "${f1} ${nf2} ${f3} ${f4} ${f5} ${f6}" >> output
}
branch2 () {
echo "${f1} ${f2} ${f3} ${f4} ${f5} ${f6}" >> output
}
[[ -n $(echo "${line}" | grep ":") ]] && branch1
[[ -z $(echo "${line}" | grep ":") ]] && branch2
sed -i '1d' stack
next
}
next
如果它在您的權力范圍內,在您的組織內,外交上鼓勵您將非空白字符指定為欄位分隔符,因為它大大簡化了處理。我自己的偏好是 ,但我相信,是習慣性的。
如果不是,我提前道歉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/517589.html
標籤:重击grep猫基因组
上一篇:拆分包含多個分子的大檔案
