Estou assumindo que o último campo deve ser interpretado da mesma maneira que o penúltimo, ou seja, 340
significa um deslocamento de 3 horas e 40 minutos.
Se isso estiver correto, então, usando as Funções de tempo do GNU awk, você poderia fazer
awk '
BEGIN{FS=","; OFS=", "}
{
split($2,d,"-");
t0 = mktime(d[1]" "d[2]" "d[3]" "int($5 / 100)" "$5 % 100" 0");
$5 = strftime("%Y-%m-%d %H:%M", t0);
$6 = strftime("%Y-%m-%d %H:%M", t0 + 3600 * int($6 / 100) + 60 * ($6 % 100))
} 1' afile.txt
1, 2012-02-16, abc, aa, 2012-02-16 04:55, 2012-02-16 08:35
3, 2015-02-16, dsa, dl, 2015-02-16 03:50, 2015-02-16 05:50
2, 2015-02-16, aws, sw, 2015-02-16 05:55, 2015-02-16 08:15
4, 2015-02-16, yyz, aa, 2015-02-16 12:20, 2015-02-16 14:30
Se o último campo for simplesmente minutos, a matemática para $6
será mais fácil:
awk '
BEGIN{FS=","; OFS=", "}
{
split($2,d,"-");
t0 = mktime(sprintf("%d %d %d %d %d 0", d[1], d[2], d[3], int($5 / 100), $5 % 100));
$5 = strftime("%Y-%m-%d %H:%M", t0);
$6 = strftime("%Y-%m-%d %H:%M", t0 + 60 * $6) } 1' afile.txt
1, 2012-02-16, abc, aa, 2012-02-16 04:55, 2012-02-16 10:35
3, 2015-02-16, dsa, dl, 2015-02-16 03:50, 2015-02-16 07:10
2, 2015-02-16, aws, sw, 2015-02-16 05:55, 2015-02-16 08:55
4, 2015-02-16, yyz, aa, 2015-02-16 12:20, 2015-02-16 15:50