Text-Processing

提取某些子串

  • August 24, 2021

我有一個這樣的文件:

RSID1 RSID2
chr1_169894240_G_T_b38  chr1_169894240_G_T_b38
chr1_169894240_G_T_b38  chr1_169891332_G_A_b38
chr1_169891332_G_A_b38  chr1_169891332_G_A_b38
chr1_169661963_G_A_b38  chr1_169661963_G_A_b38
chr1_169661963_G_A_b38  chr1_169697456_A_T_b38
chr1_169697456_A_T_b38  chr1_169697456_A_T_b38
chr1_27636786_T_C_b38   chr1_27636786_T_C_b38
chr1_196651787_C_T_b38  chr1_196651787_C_T_b38
chr6_143501715_T_C_b38  chr6_143501715_T_C_b38

我想提取資訊,就像:chr1_169894240 chr1_169894240。我不想知道其他資訊。我只是想chr_pos混淆如何提取此資訊,因為長度是不同的。在一種情況下,它的長度為 9,而在另一種情況下,它的長度為 10。因此,如果我cut對某些顯示寫入值的命令使用命令,chr_pos但對於某些顯示chr_pos_,任何人都可以幫我解決這個問題。

使用 awk:

awk 'NR >1 {split($1, array, "_"); print array[1] "_" array[2]; split($2, array, "_"); print array[1] "_" array[2]}' FILE

如果你有 GNU grep,你可以選擇一個匹配的模式,每行顯示一個,像這樣

grep -oE '\<chr[[:digit:]]+_[[:digit:]]+' file

正則表達式可以這樣分解

  • \<- 匹配單詞的開頭
  • chr- 文字字元
  • [[:digit:]]+- 一個或多個 (the +) 數字
  • _- 文字下劃線

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