Hay muchas utilidades disponibles en los sistemas Linux y Unix que le permiten procesar y filtrar archivos de texto. cut es una utilidad de línea de comandos que le permite cortar partes de líneas de archivos específicos o datos canalizados e imprimir el resultado en una salida estándar. Se puede usar para cortar partes de una línea por delimitador, posición de byte y carácter.
En este artículo, le mostraremos cómo usar el cut comando a través de ejemplos prácticos y explicaciones detalladas de las opciones más comunes.
Cómo usar el cut Comando #
La sintaxis para cut El comando es el siguiente:
cut OPTION... [FILE]...
Las opciones que le dicen a cut si se debe usar un delimitador, una posición de byte o un carácter al cortar partes seleccionadas, las líneas son las siguientes:
-f(--fields=LIST) - Seleccione especificando un campo, un conjunto de campos o un rango de campos. Esta es la opción más utilizada.-b(--bytes=LIST) - Seleccione especificando un byte, un conjunto de bytes o un rango de bytes.-c(--characters=LIST) - Seleccione especificando un carácter, un conjunto de caracteres o un rango de caracteres.
Puede usar una y solo una de las opciones enumeradas anteriormente.
Otras opciones son:
-d(--delimiter) - Especifique un delimitador que se utilizará en lugar del delimitador predeterminado "TAB".--complement- Complementar la selección. Al usar esta opcióncutmuestra todos los bytes, caracteres o campos excepto los seleccionados.-s(--only-delimited) - Por defectocutimprime las líneas que no contienen ningún carácter delimitador. Cuando se usa esta opción,cutno imprime líneas que no contienen delimitadores.--output-delimiter- El comportamiento predeterminado decutes utilizar el delimitador de entrada como delimitador de salida. Esta opción le permite especificar una cadena delimitadora de salida diferente.
El cut El comando puede aceptar cero o más nombres de ARCHIVO de entrada. Si no hay FILE se especifica, o cuando FILE es - , cut leerá de la entrada estándar.
La LIST argumento pasado a -f , -b y -c las opciones pueden ser un número entero, varios números enteros separados por comas, un rango de números enteros o varios rangos de números enteros separados por comas. Cada rango puede ser uno de los siguientes:
Nel campo N-ésimo, byte o carácter, a partir de 1.N-desde el enésimo campo, byte o carácter, hasta el final de la línea.N-Mdel campo, byte o carácter N-ésimo al M-ésimo.-Mdesde el primero hasta el M-ésimo campo, byte o carácter.
Cómo cortar por campo #
Para especificar los campos que se deben cortar, invoque el comando con -f opción. Cuando no se especifica, el delimitador predeterminado es "TAB".
En los ejemplos siguientes, utilizaremos el siguiente archivo. Los campos están separados por tabulaciones.
test.txt245:789 4567 M:4540 Admin 01:10:1980
535:763 4987 M:3476 Sales 11:04:1978
Por ejemplo, para mostrar el primer y el tercer campo, usaría:
cut test.txt -f 1,3 245:789 M:4540
535:763 M:3476
O si desea mostrar del 1.er al 4.º campo:
cut test.txt -f -4 245:789 4567 M:4540 Admin
535:763 4987 M:3476 Sales
Cómo cortar basado en un delimitador #
Para cortar en función de un delimitador, invoque el comando con -d opción, seguida del delimitador que desea usar.
Por ejemplo, para mostrar los campos 1 y 3 usando ":" como delimitador, escribiría:
cut test.txt -d ':' -f 1,3 245:4540 Admin 01
535:3476 Sales 11
Puede utilizar cualquier carácter único como delimitador. En el siguiente ejemplo, usamos el carácter de espacio como delimitador e imprimimos el segundo campo:
echo "Lorem ipsum dolor sit amet" | cut -d ' ' -f 2 ipsum
Cómo complementar la selección #
Para complementar la lista de campos de selección, use --complement opción. Esto imprimirá solo aquellos campos que no estén seleccionados con -f opción.
El siguiente comando imprimirá todos los campos excepto el primero y el tercero:
cut test.txt -f 1,3 --complement 4567 Admin 01:10:1980
4987 Sales 11:04:1978
Cómo especificar un delimitador de salida #
Para especificar el delimitador de salida, utilice --output-delimiter opción. Por ejemplo, para establecer el delimitador de salida en _ usarías:
cut test.txt -f 1,3 --output-delimiter='_' 245:789_M:4540
535:763_M:3476
Cómo cortar por bytes y caracteres #
Antes de continuar, hagamos una distinción entre bytes y caracteres.
Un byte tiene 8 bits y puede representar 256 valores diferentes. Cuando se estableció el estándar ASCII, se tomaron en cuenta todas las letras, números y símbolos necesarios para trabajar con el inglés. La tabla de caracteres ASCII tiene 128 caracteres y cada carácter está representado por un byte. Cuando las computadoras comenzaron a ser accesibles a nivel mundial, las empresas de tecnología comenzaron a introducir nuevas codificaciones de caracteres para diferentes idiomas. Para los idiomas que tienen más de 256 caracteres, no fue posible una asignación simple de 1 a 1. Esto genera diferentes problemas, como compartir documentos o navegar por sitios web, y se necesitaba un nuevo estándar Unicode que pueda manejar la mayoría de los sistemas de escritura del mundo. UTF-8 fue creado para resolver estos problemas. En UTF-8, no todos los caracteres se representan con 1 byte. Los caracteres se pueden representar con 1 byte a 4 bytes.
El -b (--bytes ) le dice al comando que corte secciones de cada línea especificada por posiciones de byte dadas.
En los siguientes ejemplos, estamos usando el ü carácter que ocupa 2 bytes.
Seleccione el quinto byte:
echo 'drüberspringen' | cut -b 5 b
Seleccione los bytes 5, 9 y 13:
echo 'drüberspringen' | cut -b 5,9,13 bpg
Seleccione el rango del 1.º al 5.º byte:
echo 'drüberspringen' | cut -b 1-5 drüb
Al momento de escribir este artículo, la versión de cut incluido en GNU coreutils no tiene una opción para cortar por caracteres. Cuando se usa -c opción, cut se comporta igual que cuando se usa -b opción.
Ejemplos de corte #
El cut El comando generalmente se usa en combinación con otros comandos a través de tuberías. Estos son algunos ejemplos:
Obtener una lista de todos los usuarios #
La salida de getent passwd el comando se pasa a cut , que imprime el primer campo usando : como delimitador.
getent passwd | cut -d ':' -f1 El resultado muestra una lista de todos los usuarios del sistema.
Ver los 10 comandos más utilizados #
En el siguiente ejemplo, cut se usa para eliminar los primeros 8 bytes de cada línea del history salida de comando.
history | cut -c8- | sort | uniq -c | sort -rn | head Conclusión #
cut El comando se usa para mostrar campos seleccionados de cada línea de archivos dados o la entrada estándar.
Aunque muy útil, cut tiene algunas limitaciones. No admite especificar más de un carácter como delimitador y no admite múltiples delimitadores.
Si tiene alguna pregunta o comentario, no dude en dejar un comentario.