如何使用 awk 将一个值替换为 gzip 文件中特定列中的另一个值?
How to replace a value to another value in a specific column on a gzipped file using awk?
我有一个压缩文件 (.gz) 该文件大约有 7000000 行,前几行如下所示:
CHROM POS ID REF ALT A1 TEST OBS_CT BETA SE T_STAT P
1 54712 1:54712 TTTTC T ADD 1460 0.00428077 0.0561095 0.0762931 0.939196
1 825069 rs4475692 G C G ADD 1460 -0.000411661 0.0413083 -0.00996558 0.99205
1 825410 rs13303179 G A G ADD 1460 0.00489633 0.041967 0.116671 0.907137
文件末尾第一列有X
X 154929637 rs35185538:154929637:CT:C CT C C ADD 1460 0.0787708 0.0396199 1.98816 0.0469823
X 154929952 rs4012982:154929952:CAA:C CAA C C ADD 1460 0.0265508 0.0522027 0.50861 0.611104
X 154930230 rs781880:154930230:A:G A G G ADD 1460 0.0827871 0.0356246 2.32387 0.0202707
我想将 X(仅 X)替换为 23 并保留 header。我试了没用。
gunzip -c file.gz | awk 'NR==1{gsub(/\X/,"23",)} 1' > out.txt
任何帮助将不胜感激。
阿维尼
您可以只检查第一列中的 X 并检查行号是否大于 1。
然后您可以使用 ^X
将字符串开头的 X 替换为 23。
awk 'NR > 1 && =="X" {sub(/^X/,"23")}1' > out.txt
我有一个压缩文件 (.gz) 该文件大约有 7000000 行,前几行如下所示:
CHROM POS ID REF ALT A1 TEST OBS_CT BETA SE T_STAT P
1 54712 1:54712 TTTTC T ADD 1460 0.00428077 0.0561095 0.0762931 0.939196
1 825069 rs4475692 G C G ADD 1460 -0.000411661 0.0413083 -0.00996558 0.99205
1 825410 rs13303179 G A G ADD 1460 0.00489633 0.041967 0.116671 0.907137
文件末尾第一列有X
X 154929637 rs35185538:154929637:CT:C CT C C ADD 1460 0.0787708 0.0396199 1.98816 0.0469823
X 154929952 rs4012982:154929952:CAA:C CAA C C ADD 1460 0.0265508 0.0522027 0.50861 0.611104
X 154930230 rs781880:154930230:A:G A G G ADD 1460 0.0827871 0.0356246 2.32387 0.0202707
我想将 X(仅 X)替换为 23 并保留 header。我试了没用。
gunzip -c file.gz | awk 'NR==1{gsub(/\X/,"23",)} 1' > out.txt
任何帮助将不胜感激。
阿维尼
您可以只检查第一列中的 X 并检查行号是否大于 1。
然后您可以使用 ^X
将字符串开头的 X 替换为 23。
awk 'NR > 1 && =="X" {sub(/^X/,"23")}1' > out.txt