No olvides que en las ciencias informáticas un problema casi siempre tiene más de una resoluciones, de igual modo te enseñamos lo más óptimo y eficiente.
Solución:
Solo usa var = var1 var2
y automáticamente concatenará las vars var1
y var2
:
awk 'new_var=$1$2; print new_var' file
Puedes poner un espacio en el medio con:
awk 'new_var=$1" "$2; print new_var' file
Que de hecho es lo mismo que usar FS
porque por defecto es el espacio:
awk 'new_var=$1 FS $2; print new_var' file
Prueba
$ cat file
hello how are you
i am fine
$ awk 'new_var=$1$2; print new_var' file
hellohow
iam
$ awk 'new_var=$1 FS $2; print new_var' file
hello how
i am
Puedes jugar con él en ideone: http://ideone.com/4u2Aip
Podría utilizar sprintf
para lograr esto:
awk 'str = sprintf("%s %s", $1, $2) END print str' file
La concatenación de cadenas en awk se puede lograr mediante el comando de impresión de la página del manual de AWK, y puede hacer una combinación complicada. Aquí estaba tratando de cambiar los 16 caracteres a A y usé string concatenación:
echo CTCTCTGAAATCACTGAGCAGGAGAAAGATT | awk -v w=15 -v BA=A 'OFS=""; print substr($0, 1, w), BA, substr($0,w+2)'
Output: CTCTCTGAAATCACTAAGCAGGAGAAAGATT
Usé la función substr para extraer una parte de la entrada (STDIN). Pasé algunos parámetros externos (aquí estoy usando valores codificados) que generalmente son variables de shell. En el contexto de la programación de shell, puede escribir -vw=$width -v BA=$my_charval. los key es el OFS que significa campo de salida separado en awk. La función de impresión toma una lista de valores y los escribe en STDOUT y los pega con OFS. Esto es análogo a la función de unión de Perl.
Parece que en awk, string se pueden concatenar imprimiendo variables una al lado de la otra:
echo xxx | awk -v a="aaa" -v b="bbb" ' print a b $1 "string literal"'
# will produce: aaabbbxxxstring literal