How-To: Split with AWK – Separar una cadena con AWK

Para quien no conozca a nuestro amigo AWK pueden avocarse a wikipedia http://en.wikipedia.org/wiki/AWK.

Extenderme a hablar de esta textutil de linux en su totalidad es mucho para un post, asi que por ahi irán saliendo uno que otro how-to de textutils.

Resulta que por algun motivo tenemos una cadena que necesitamos hacer pedazos a partir de un caracter en específico, por ejemplo un archivo con path de origen y destino para mover o copiar archivos, vamos a tomar de ejemplo lo que sería una linea del archivo

/home/fernando/hola.txt|/root/hola.txt

esto quiere decir que necesitamos una sentencia como esta:

cp /home/fernando/hola.txt /root/hola.txt

Acá es donde llega nuestro amigo AWK para plantearnos la solución a este dilema que viene a ser algo así:

echo "/home/fernando/hola.txt|/root/hola.txt" | awk '{split($1,arrayName,"|"); print "cp "arrayName[1]" "arrayName[2]}'

Especificamente quien hace la tarea es el comando “split” el cual tiene 3 parametros:

  • Cadena de entrada ( $1 ) [Ver wikipedia el segmento del comando print  ]
  • nombre del Arreglo ( arrayName ) , el conteo de posiciones comienza en 1.
  • separador ( “|” )

Si tenemos varias lineas en un archivo de entrada en lugar del comando “echo” podemos utilizar “cat [archivo de entrada]” asi:

cat listado.txt | awk '{split($1,arrayName,"|"); print "cp "arrayName[1]" "arrayName[2]}'

La salida de este comando nos dará un listado de sentencias que podremos utilizar y ejecutar directamente, lo cual podríamos hacerlo con un apóstrofe invertido (`)

`echo "/home/fernando/hola.txt|/root/hola.txt" | awk '{split($1,arrayName,"|"); print "cp "arrayName[1]" "arrayName[2]}'`

Comparte Este Post:
  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks
  • FriendFeed

About fboiton

I'm a Software Developer specialized in Web Solutions for Large Scale and High Availability Applications, with more than 8 years of experience in Web Applications development. Software Architecture, Team Management and Continous Improvement are my bigger interests. Specialties ASP.NET, SQL Server, Web Development in general, Linux Servers, Software Architecture, Team Management.
This entry was posted in Desarrollo de Software and tagged , , , , , , . Bookmark the permalink.

Leave a Reply