我有一个包含 1.92 亿行的 7 列文件。我想过滤文件,使其第二列中只有以 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_
或 chr7_
开头。我将如何使用 awk
执行此操作?
我累了
gunzip -c file.txt.gz | awk '$2 ~ /^chr1/' > output.txt
但是输出还包含 chr19 和 chr10。一切都带有 1。我也不确定如何包含 chr7。
最佳答案
您可以使用:
gunzip -c file.txt.gz | awk '$2 ~ /^chr[17]_/' > output.txt
^chr[17]_
将在起始位置之后匹配 chr1_
或 chr7_
。通过添加 _
,我们确保不匹配 chr10
或 chr75
。
https://stackoverflow.com/questions/74220927/