0

次のようなファイルがあります。

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

出力が次のようになるように、値が異なる 2 つの列を追加するにはどうすればよいですか。

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

ヒントはありますか?ありがとう。

4

2 に答える 2

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

これは、ID と Population が固定されていることが前提です。

于 2012-07-10T14:36:53.420 に答える
1

Karl Nordströ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
于 2012-07-10T16:40:13.740 に答える