![将两个字符的列读取为两个单独的列](https://linux22.com/image/34455/%E5%B0%86%E4%B8%A4%E4%B8%AA%E5%AD%97%E7%AC%A6%E7%9A%84%E5%88%97%E8%AF%BB%E5%8F%96%E4%B8%BA%E4%B8%A4%E4%B8%AA%E5%8D%95%E7%8B%AC%E7%9A%84%E5%88%97.png)
我有一个包含基因型数据的文件。第二列具有连接的特定遗传变体的两个等位基因,如下所示。
rs969931 CA 1.000 2.000 2.000 2.000 2.000 2.000 1.000 1.000
rs2745406 CT 0.000 2.000 2.000 1.000 1.000 2.000 1.000 1.000
rs6939431 AG 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000
rs1233427 AG 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs1233426 AG 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs1233425 GC 1.000 1.999 1.999 2.000 2.000 2.000 1.000 1.000
rs362546 GA 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs909968 AG 0.000 2.000 2.000 1.000 1.000 1.000 1.000 1.000
rs909967 GA 1.000 2.000 2.000 2.000 2.000 2.000 1.000 1.000
rs886381 AG 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000
我需要创建一个新文件,其中等位基因作为两个单独的列,即将第二列分成两列。下面是所需的输出。有没有办法在 awk 中指定多个字段分隔符来实现此目的?
rs969931 C A 1.000 2.000 2.000 2.000 2.000 2.000 1.000 1.000
rs2745406 C T 0.000 2.000 2.000 1.000 1.000 2.000 1.000 1.000
rs6939431 A G 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000
rs1233427 A G 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs1233426 A G 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs1233425 G C 1.000 1.999 1.999 2.000 2.000 2.000 1.000 1.000
rs362546 G A 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs909968 A G 0.000 2.000 2.000 1.000 1.000 1.000 1.000 1.000
rs909967 G A 1.000 2.000 2.000 2.000 2.000 2.000 1.000 1.000
rs886381 A G 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000
答案1
sub
您可以使用以下函数来完成此操作awk
:
awk 'sub(/./,"& ",$2)1;' file
如果您想要制表符分隔的输出,您可以使用:
awk -v OFS="\t" 'sub(/./,"&\t",$2)1;' file
或者在各种其他工具中:
珀尔
perl -alne '$F[1]=~s/./$& /; print "@F"' file
或者,对于制表符分隔的输出:
perl -alne '$F[1]=~s/./$&\t/; print join "\t",@F' file
GNU
sed
sed -r 's/\S+\s+\S/& /' file
其他
sed
sed 's/^[[:alnum:]]*[[:blank:]]*./& /' file
壳
while read -r snp nt rest; do printf "%s\t%s\t%s\t%s\n" "$snp" "${nt:0:1}" "${nt:0:1}" "$rest" done < file
答案2
用于:gsub
awk
awk 'gsub(""," ",$2)1' file
结果:
rs969931 C A 1.000 2.000 2.000 2.000 2.000 2.000 1.000 1.000
rs2745406 C T 0.000 2.000 2.000 1.000 1.000 2.000 1.000 1.000
rs6939431 A G 0.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000
rs1233427 A G 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs1233426 A G 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs1233425 G C 1.000 1.999 1.999 2.000 2.000 2.000 1.000 1.000
rs362546 G A 1.000 2.000 2.000 2.000 2.000 1.000 1.000 1.000
rs909968 A G 0.000 2.000 2.000 1.000 1.000 1.000 1.000 1.000
rs909967 G A 1.000 2.000 2.000 2.000 2.000 2.000 1.000 1.000
rs886381 A G 0.000 0.000 0.000 0.000 0.000 0.000 0.000 1.000