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óncut
muestra todos los bytes, caracteres o campos excepto los seleccionados.-s
(--only-delimited
) - Por defectocut
imprime las líneas que no contienen ningún carácter delimitador. Cuando se usa esta opción,cut
no imprime líneas que no contienen delimitadores.--output-delimiter
- El comportamiento predeterminado decut
es 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:
N
el 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-M
del campo, byte o carácter N-ésimo al M-ésimo.-M
desde 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.