如何转换不同列中每个字的不同数字(unix)

如何转换不同列中每个字的不同数字(unix),unix,awk,Unix,Awk,我有一个包含28列的大文件,其中包含3种不同的代码(0/0、1/1和0/1),我希望将其转换为单词。这个文件有数百万行,每行都有“Chr” 我想按如下方式转换28列和所有行中的代码: 0/0至无变体 1/1到homo 0/1至het 怎么做?之前我已经转换了,但是我只有一列包含2个代码(0/1和1/1),现在我有28列要转换,我使用了3个代码 awk '{if ($9=="0/1") {print $0,"het"} else{print $0}}' | awk '{if ($9=="1/1")

我有一个包含28列的大文件,其中包含3种不同的代码(0/0、1/1和0/1),我希望将其转换为单词。这个文件有数百万行,每行都有“Chr”

我想按如下方式转换28列和所有行中的代码:

0/0
无变体

1/1
homo

0/1
het

怎么做?之前我已经转换了,但是我只有一列包含2个代码(0/1和1/1),现在我有28列要转换,我使用了3个代码

awk '{if ($9=="0/1") {print $0,"het"} else{print $0}}' | awk '{if ($9=="1/1") {print $0,"hom"} else{print $0}}'
非常感谢

克拉丽莎

sed 's|0/0|no_variant|g; s|1/1|homo|g; s|0/1|het|g' file
哎呀,那就太好了

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
awk'
开始{c[“0/0”]=“无变体”;c[“0/1”]=“het”;c[“1/1”]=“homo”}

{对于(n=9;您是否需要将所有
0/0
转换为
no_variant
等,或者只转换某个列?
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