如何使用不同值的列表添加两列

时间:2012-07-10 14:33:15

标签: linux awk

我有一个看起来像这样的文件:

893     990     1000    1020    1500    1655 
  0/1   1/1     0/1     .       1/0     .
  .     0/1     .       1/1     1/0     .      
  .     .       1/1     0/1     1/0     1/0

如何添加具有不同值的两列,以便输出如下所示:

ID      Population      893     990     1000    1020    1500    1655 
AD0062  pop1      0/1   1/1     0/1     .       1/0     .
AD0063  pop1      .     0/1     .       1/1     1/0     .      
AD0074  pop1      .     .       1/1     0/1     1/0     1/0

任何提示?感谢。

2 个答案:

答案 0 :(得分:1)

awk '{print "ID\tPopulation\t"$0}' input_file

这是因为ID和人口是固定的。

答案 1 :(得分:1)

基于KarlNordström的上一个答案以及添加ID的评论,我希望这个awk程序可以完成这项工作:

infile的内容:

893     990     1000    1020    1500    1655 
  0/1   1/1     0/1     .       1/0     .
  .     0/1     .       1/1     1/0     .      
  .     .       1/1     0/1     1/0     1/0

script.awk的内容:

BEGIN {
    population = "pop1"
    id = "AD0062,AD0063,AD0065,AD0074,AD0075,AD0076,AD0077,AD0078,AD0082,\
          AD0083,AD0087,AD0091,AD0092,AD0098,AD0099,AD0100"
    split( id, id_arr, /,/ )

    OFS = "\t"
}

FNR == 1 { 
    printf "%s\t%s\t%s\n", "ID", "Population", $0
    next
}

FNR > 1 { 
    printf "%s\t%s\t%s\n", id_arr[ FNR - 1 ], population, $0
}

像以下一样运行:

awk -f script.awk infile

使用以下输出:

ID      Population      893     990     1000    1020    1500    1655 
AD0062  pop1      0/1   1/1     0/1     .       1/0     .
AD0063  pop1      .     0/1     .       1/1     1/0     .      
AD0065  pop1      .     .       1/1     0/1     1/0     1/0