如何转换不同列中每个单词的不同数字(unix)
How to convert different numbers per words in different columns (unix)
我有一个包含 28 列的大文件,其中包含 3 个不同的代码(0/0、1/1 和 0/1),我想将其转换为文字。这个文件有数百万行,每一行都以 "Chr"
开头
Chr10_102 T G 999 DP 38 DP4 37 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0
Chr1_111 C T 999 DP 37 DP4 37 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 ...
我想将 28 列和所有行中的代码转换如下:
0/0
到 no_variant
1/1
到 homo
0/1
至 het
怎么做?我之前转换过,但我只有一列有 2 个代码(0/1 和 1/1),现在我有 28 列要转换和 3 个代码,我使用
awk '{if (=="0/1") {print [=11=],"het"} else{print [=11=]}}' | awk '{if (=="1/1") {print [=11=],"hom"} else{print [=11=]}}'
非常感谢
克拉丽莎
sed 's|0/0|no_variant|g; s|1/1|homo|g; s|0/1|het|g' file
作为 awk,那将是
awk '{gsub("0/0","no_variant"); gsub("1/1","homo"); gsub("0/1","het")} 1' file
如果出于某种原因需要逐列查看,请使用 for 循环:
awk '
BEGIN {c["0/0"] = "no_variant"; c["0/1"] = "het"; c["1/1"] = "homo"}
{for (n=9; n<=NF; n++) {$n = c[$n]}; print}
' file
我有一个包含 28 列的大文件,其中包含 3 个不同的代码(0/0、1/1 和 0/1),我想将其转换为文字。这个文件有数百万行,每一行都以 "Chr"
开头Chr10_102 T G 999 DP 38 DP4 37 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/0 0/0 0/0 0/1 0/0 0/1 0/0 0/0
Chr1_111 C T 999 DP 37 DP4 37 0/1 1/1 0/0 0/1 0/1 0/1 0/1 0/1 0/0 0/1 0/1 0/0 0/0 0/1 1/1 1/1 0/1 0/1 0/0 1/1 0/0 0/0 0/1 0/1 0/1 0/1 1/1 0/1 ...
我想将 28 列和所有行中的代码转换如下:
0/0
到 no_variant
1/1
到 homo
0/1
至 het
怎么做?我之前转换过,但我只有一列有 2 个代码(0/1 和 1/1),现在我有 28 列要转换和 3 个代码,我使用
awk '{if (=="0/1") {print [=11=],"het"} else{print [=11=]}}' | awk '{if (=="1/1") {print [=11=],"hom"} else{print [=11=]}}'
非常感谢
克拉丽莎
sed 's|0/0|no_variant|g; s|1/1|homo|g; s|0/1|het|g' file
作为 awk,那将是
awk '{gsub("0/0","no_variant"); gsub("1/1","homo"); gsub("0/1","het")} 1' file
如果出于某种原因需要逐列查看,请使用 for 循环:
awk '
BEGIN {c["0/0"] = "no_variant"; c["0/1"] = "het"; c["1/1"] = "homo"}
{for (n=9; n<=NF; n++) {$n = c[$n]}; print}
' file