awk - 适用于除一个以外的所有字段?

时间:2014-02-11 20:28:17

标签: bash awk field

有一个文件,我想在除第一个字段之外的所有字段上执行awk Gsub。有可变数量的字段,所以我想弄清楚我是否可以编写一个条件命令来应用除$ 1以外的所有字段。

如果有办法说$ {2-20},我甚至会工作。但是,我似乎无法在awk的任何地方找到这种类型的命令。谢谢。这是一个练习的例子。

我希望做这样的事情:

修改

我尝试了这个,但它没有改变任何东西。

awk 'x!=$1{gsub("C","g",x);gsub("G","c",x);gsub("T","a",x);gsub("A","t",x)}{print}' F1 

F1
G 6472 193 0.0 0.0 193.0 0.0 0.0   C   d
T 6482 91 91.0 0.0 0.0 0.0 0.0 T     d
G 7482 187 0.0 0.0 187.0 0.0 0.0   C   d
T 8860 74 0.0 0.0 0.0 74.0 0.0    A  d
G 9254 52 0.0 0.0 52.0 0.0 0.0   C   d
A 10059 78 78.0 0.0 0.0 0.0 0.0 T     d
G 10476 757 0.0 1.0 755.0 1.0 0.0   C   d
G 16122 125 0.0 1.0 124.0 0.0 0.0   C   d
G 17053 316 0.0 0.0 316.0 0.0 0.0   C   d
G 19312 56 0.0 0.0 55.0 1.0 0.0   C   d


Desired out
G 6472 193 0.0 0.0 193.0 0.0 0.0   g   d
T 6482 91 91.0 0.0 0.0 0.0 0.0 a     d
G 7482 187 0.0 0.0 187.0 0.0 0.0   g   d
T 8860 74 0.0 0.0 0.0 74.0 0.0    t  d
G 9254 52 0.0 0.0 52.0 0.0 0.0   g   d
A 10059 78 78.0 0.0 0.0 0.0 0.0 a     d
G 10476 757 0.0 1.0 755.0 1.0 0.0   g   d
G 16122 125 0.0 1.0 124.0 0.0 0.0   g   d
G 17053 316 0.0 0.0 316.0 0.0 0.0   g   d
G 19312 56 0.0 0.0 55.0 1.0 0.0   g   d

感谢。

3 个答案:

答案 0 :(得分:2)

这一行做你想要的:

 awk 'BEGIN{d["C"]="g";d["G"]=c;d["T"]="a";d["A"]="t"}
      $(NF-1) in d{$(NF-1)=d[$(NF-1)]}7' file

答案 1 :(得分:2)

另一种方式,......关闭你的代码:

awk '{ s=$1; sub($1,""); gsub("C","g"); gsub("G","c"); gsub("T","a"); gsub("A","t"); print s $0 }' filename

要保留我使用的空格sub($1,"")而不是$1=""

答案 2 :(得分:0)

在评论中结合Kents答案和shellters答案,我想出了这个脚本,它允许我将capitols改为capitols并保持原来的白色香料。

awk '
        BEGIN{d["G"]="C";d["C"]="G";d["T"]="A";d["A"]="T";FS="";OFS=""}
        {for(i=2;i<(NF+1);i++)
                {if($i in d)
                        $i=d[$i]}
                                }
        {print}' $1

Output:
G 6472 193 0.0 0.0 193.0 0.0 0.0   G   d
T 6482 91 91.0 0.0 0.0 0.0 0.0 A     d
G 7482 187 0.0 0.0 187.0 0.0 0.0   G   d
T 8860 74 0.0 0.0 0.0 74.0 0.0    T  d
G 9254 52 0.0 0.0 52.0 0.0 0.0   G   d
A 10059 78 78.0 0.0 0.0 0.0 0.0 A     d
G 10476 757 0.0 1.0 755.0 1.0 0.0   G   d
G 16122 125 0.0 1.0 124.0 0.0 0.0   G   d
G 17053 316 0.0 0.0 316.0 0.0 0.0   G   d
G 19312 56 0.0 0.0 55.0 1.0 0.0   G   d