lunes, 1 de junio de 2015

cat – Concatenando archivos

El comando cat lee uno o más archivos y los copia a la salida estándar de la siguiente forma:

cat [archivo...]

En la mayoría de los casos, puedes pensar que cat es análogo al comando TYPE de DOS. Puedes usarlo para mostrar archivos sin paginar, por ejemplo:

[me@linuxbox ~]$ cat ls-output.txt

mostrará el contenido del archivo ls-output.txt. cat a menudo se usa para mostrar archivos de texto cortos. Como cat puede aceptar más de un archivo como argumento, también se puede usar para unir archivos. Imagina que hemos descargado un gran archivo que ha sido dividido en múltiples partes (los archivos multimedia a menudo están divididos de esta forma en Usenet), y queremos unirlos de nuevo. Si los archivos se llamaran:

movie.mpeg.001 movie.mpeg.002 ... movie.mpeg.099

podríamos unirlos de nuevo con este comando:

cat movie.mpeg.0* > movie.mpeg

Como los comodines siempre expanden sus resultados en orden, los argumentos se distribuirán en el orden correcto.

Todo esto está muy bien, pero ¿qué tiene esto que ver con la entrada estándar? Nada todavía, pero probemos algo más. Qué pasa si usamos “cat” sin argumentos:

[me@linuxbox ~]$ cat

No ocurre nada, sólo se queda quieto como si se hubiera quedado colgado. Podría parecer eso, pero realmente está haciendo lo que se supone que debe hacer.

Si no le damos argumentos a cat, lee de la entrada estándar y como la entrada estándar está, por defecto, asignada al teclado, ¡está esperando a que tecleemos algo! Prueba a añadir el siguiente texto y pulsa Enter:

[me@linuxbox ~]$ cat
The quick brown fox jumped over the lazy dog.

Ahora, pulsa Ctrl-d (es decir, mantén pulsada la tecla Ctrl y luego pulsa “d”) para decirle a cat que ha alcanzado el final del archivo (EOF – end of file) en la entrada estándar:

[me@linuxbox ~]$ cat
The quick brown fox jumped over the lazy dog.
The quick brown fox jumped over the lazy dog.

En ausencia de nombres de archivo como argumentos, cat copia la entrada estándar a la salida estándar, así que vemos nuestra línea de texto repetida. Podemos usar este comportamiento para crear archivos de texto cortos. Digamos que queremos crear un archivo llamado “lazy_dog.txt” conteniendo el texto de nuestro ejemplo. Podríamos hacer esto:

[me@linuxbox ~]$ cat > lazy_dog.txt
The quick brown fox jumped over the lazy dog.

Escribe el comando seguido del texto que queremos colocar en el archivo. Recuerda pulsar Ctrl-d al final. Usando la línea de comandos, ¡hemos implementado el procesador de texto más tonto del mundo! Para ver nuestros resultados, podemos usar cat para copiar de nuevo el archivo a stdout:

[me@linuxbox ~]$ cat lazy_dog.txt
The quick brown fox jumped over the lazy dog.

Ahora que sabemos cómo cat acepta la entrada estándar, además de nombres de archivo como argumentos, probemos redirigiendo la entrada estándar:

[me@linuxbox ~]$ cat < lazy_dog.txt
The quick brown fox jumped over the lazy dog.

Usando el operador de redirección “<”, hemos cambiado el origen de la entrada estándar del teclado al archivo lazy_dog.txt. Vemos que el resultado es el mismo que pasarle un nombre de archivo como argumento. Esto no es particularmente útil en comparación con pasar un nombre de archivo como argumento, pero sirve para demostrar el uso de un archivo como fuente de la entrada estándar. Otros comandos hacen un mejor uso de la entrada estándar, como veremos pronto.

Antes de seguir, echa un vistazo a la man page de cat, ya que tiene varias opciones interesantes.

No hay comentarios:

Publicar un comentario