Linux

子集文件以獲取正確的染色體

  • September 29, 2017

我有一個輸入文件,其中一些內容如下

chr1    12227   12612
chr1_ett    12721   13220
chr1    14829   14969
chr2    15038   15795
chr2_tdr    15947   16606
chr1    16765   16857
chr1    17055   17232
chr1    17368   17605
chr3    17742   17914
chr3_urr    18061   18267

我想刪除"_"第一列中有(下劃線)的那些行。所以基本上只保留 chr1,chr2,chr3 而不是 chr1_chr2_chr3_ 等染色體從 chr1 到 chr22 並具有 chrX chrY 和 chrM。

我該怎麼做。

謝謝

嘗試

awk '$1 !~ /_/' input_file.txt > output.txt

這將選擇$1(第一列)不包含的所有行_

或者,根據 Glenn Jackmann 的建議

awk '! index($1,"_") ' input_file.txt > output.txt

另一種方式可能是

sed -i -e '/^chr[0-9]*_/d' file.txt

這將刪除同一行。(假設行完全以 開頭chr

sed '/_/d' file

將刪除行中任何位置出現下劃線的所有行

如果需要將結果保存回文件,使用sed -i ...


要限制在第一列:

sed '/^[[:blank:]]*[^[:blank:]]\+_/d' file

即:在行首,可選前導空格,後跟非空格字元和下劃線。

引用自:https://unix.stackexchange.com/questions/395019