use*_*089 4 awk text-processing text-formatting
我有一个包含基因型数据的文件。第二列将特定遗传变异的两个等位基因串联在一起,如下所示。
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
Run Code Online (Sandbox Code Playgroud)
我需要使用等位基因作为两个单独的列创建一个新文件,即将第二列拆分为两列。所需的输出如下。有没有办法在 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
Run Code Online (Sandbox Code Playgroud)
您可以使用中的sub
函数来做到这一点awk
:
awk 'sub(/./,"& ",$2)1;' file
Run Code Online (Sandbox Code Playgroud)
如果你想要制表符分隔的输出,你可以使用:
awk -v OFS="\t" 'sub(/./,"&\t",$2)1;' file
Run Code Online (Sandbox Code Playgroud)
或者在各种其他工具中:
珀尔
perl -alne '$F[1]=~s/./$& /; print "@F"' file
Run Code Online (Sandbox Code Playgroud)
或者,对于制表符分隔的输出:
perl -alne '$F[1]=~s/./$&\t/; print join "\t",@F' file
Run Code Online (Sandbox Code Playgroud)GNU sed
sed -r 's/\S+\s+\S/& /' file
Run Code Online (Sandbox Code Playgroud)其他 sed
sed 's/^[[:alnum:]]*[[:blank:]]*./& /' file
Run Code Online (Sandbox Code Playgroud)贝壳
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
Run Code Online (Sandbox Code Playgroud)