Text-Processing
提取某些子串
我有一個這樣的文件:
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+
) 數字_
- 文字下劃線