我有一個包含 7 列、1.92 億行的檔案。我想過濾檔案,使其只有從第二列開始chr1_的資料。chr7_
head file.txt.gz
gene_id variant_id tss_distance ma_samples ma_count maf pval_nominal slope slope_se
ENSG00000227232.5 chr1_13550_G_A_b38 -16003 16 16 0.0132231 0.329834 0.188778 0.193552
ENSG00000227232.5 chr1_14671_G_C_b38 -14882 12 12 0.00991736 0.618791 0.110828 0.222611
ENSG00000227232.5 chr2_14677_G_A_b38 -14876 60 60 0.0495868 0.378305 -0.090737 0.102905
ENSG00000227232.5 chr3_16841_G_T_b38 -12712 46 46 0.0380165 0.100419 -0.191008 0.116067
ENSG00000227232.5 chrX_16856_A_G_b38 -12697 10 10 0.00826446 0.708684 -0.0901965 0.241282
ENSG00000227232.5 chrX_17005_A_G_b38 -12548 18 18 0.014876 0.153674 -0.257458 0.180205
ENSG00000227232.5 chr4_17005_A_G_b38 -12548 18 18 0.014876 0.153674 -0.257458 0.180205
ENSG00000227232.5 chr7_17005_A_G_b38 -12548 18 18 0.014876 0.153674 -0.257458 0.180205
輸出:
head file.txt.gz
gene_id variant_id tss_distance ma_samples ma_count maf pval_nominal slope slope_se
ENSG00000227232.5 chr1_13550_G_A_b38 -16003 16 16 0.0132231 0.329834 0.188778 0.193552
ENSG00000227232.5 chr1_14671_G_C_b38 -14882 12 12 0.00991736 0.618791 0.110828 0.222611
ENSG00000227232.5 chr7_17005_A_G_b38 -12548 18 18 0.014876 0.153674 -0.257458 0.180205
第二列的資料格式為chrnumber _number_letter_letter_b38。數字和字母可以不同。例如chr4_17005_A_G_b38或ch7_17090_A_T_b38。我只希望第二列以chr1_or開頭chr7_。我將如何使用awk?
我累了
gunzip -c file.txt.gz | awk '$2 ~ /^chr1/' > output.txt
但是,輸出還包含 chr19 和 chr10。1 的所有內容。我也不確定如何包含 chr7。
uj5u.com熱心網友回復:
您可以使用:
gunzip -c file.txt.gz | awk '$2 ~ /^chr[17]_/' > output.txt
^chr[17]_將匹配chr1_或chr7_在開始位置之后。通過添加_,我們確保我們不匹配chr10or chr75。
uj5u.com熱心網友回復:
為了檢查文本是否以您可能使用的另一個文本開頭的index函式,讓file.txt內容為
gene_id variant_id tss_distance ma_samples ma_count maf pval_nominal slope slope_se
ENSG00000227232.5 chr1_13550_G_A_b38 -16003 16 16 0.0132231 0.329834 0.188778 0.193552
ENSG00000227232.5 chr1_14671_G_C_b38 -14882 12 12 0.00991736 0.618791 0.110828 0.222611
ENSG00000227232.5 chr2_14677_G_A_b38 -14876 60 60 0.0495868 0.378305 -0.090737 0.102905
ENSG00000227232.5 chr3_16841_G_T_b38 -12712 46 46 0.0380165 0.100419 -0.191008 0.116067
ENSG00000227232.5 chrX_16856_A_G_b38 -12697 10 10 0.00826446 0.708684 -0.0901965 0.241282
ENSG00000227232.5 chrX_17005_A_G_b38 -12548 18 18 0.014876 0.153674 -0.257458 0.180205
ENSG00000227232.5 chr4_17005_A_G_b38 -12548 18 18 0.014876 0.153674 -0.257458 0.180205
ENSG00000227232.5 chr7_17005_A_G_b38 -12548 18 18 0.014876 0.153674 -0.257458 0.180205
然后
awk 'index($2,"chr1_")==1||index($2,"chr7_")==1' file.txt
給出輸出
ENSG00000227232.5 chr1_13550_G_A_b38 -16003 16 16 0.0132231 0.329834 0.188778 0.193552
ENSG00000227232.5 chr1_14671_G_C_b38 -14882 12 12 0.00991736 0.618791 0.110828 0.222611
ENSG00000227232.5 chr7_17005_A_G_b38 -12548 18 18 0.014876 0.153674 -0.257458 0.180205
說明:index如果發現否則函式確實回傳子字串的開始位置0,因此1表明它在開始。我檢查您列舉的所有字串并使用邏輯 OR ( ||) 將它們連接起來。
(在 gawk 4.2.1 中測驗)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/522308.html
標籤:正则表达式awk
