¿Cómo concatenar el identificador especificado en dos filas?

Entrada donde identificador especificado por dos filas 1-2

L1_I L1_I C-14 <---| unique idenfier WWPTH WWPT WWPTH <---| on two rows 1 2 3 

Objetivo: ¿Cómo concatenar las filas?

 L1_IWWPTH L1_IWWPT C-14WWPTH <--- unique identifier 1 2 3 

Ps aceptaré la solución más simple y elegante.

Suponiendo que la entrada está en un archivo llamado file :

 $ awk 'NR==1{for (i=1;i<=NF;i++) a[i]=$i;next} NR==2{for (i=1;i<=NF;i++) printf "%-20s",a[i] $i;print"";next} 1' file L1_IWWPTH L1_IWWPT C-14WWPTH 1 2 3 

Cómo funciona

  • NR==1{for (i=1;i<=NF;i++) a[i]=$i;next}

    Para la primera línea, guarde todos los encabezados de columna en la matriz a . Luego, omita el rest de los comandos y salte a la siguiente línea.

  • NR==2{for (i=1;i<=NF;i++) printf "%-20s",a[i] $i;print"";next}

    Para la segunda línea, imprima todos los encabezados de columna, combinando los de la primera y la segunda fila. Luego, omita el rest de los comandos y salte a la siguiente línea.

  • 1

    1 es la abreviatura críptica de awk para imprimir la línea como está. Esto se hace para todas las líneas después de los segundos.

Columnas separadas por tabulaciones con posibles columnas faltantes

Si las columnas están separadas por tabuladores:

 awk -F'\t' 'NR==1{for (i=1;i<=NF;i++) a[i]=$i;next} NR==2{for (i=1;i<=NF;i++) printf "%s\t",a[i] $i;print"";next} 1' file 

Si planeas usar python, puedes usar zip de la siguiente manera:

 input = [['L1_I', 'L1_I', 'C-14'], ['WWPTH','WWPT','WWPTH'],[1,2,3]] output = [[i+j for i,j in zip(input[0],input[1])]] + input[2:] print output 

salida:

 [['L1_IWWPTH', 'L1_IWWPT', 'C-14WWPTH'], [1, 2, 3]] 
 #!/usr/bin/awk -f NR == 1 { split($0, a) next } NR == 2 { for (b in a) printf "%-20s", a[b] $b print "" next } 1