Introducción
Hay muchas utilidades disponibles en los sistemas Linux y Unix que le permiten procesar y filtrar archivos de texto. Cortar es una utilidad de línea de comando que le permite cortar partes de líneas de archivos específicos o datos de tuberías e imprimir el resultado en una salida estándar. Se puede utilizar para cortar partes de una línea por delimitador, posición de byte y carácter.
En este tutorial, le mostraremos cómo usar el comando de recorte de Linux a través de ejemplos prácticos y explicaciones detalladas de las opciones de recorte más comunes.
Utilice el comando Cortar
La sintaxis del comando de corte es la siguiente:
cut OPTION... [FILE]...
Al usar el comando de corte, debe usar una y solo una de las siguientes opciones:
-f
(--fields=LIST
): seleccione especificando un campo, un conjunto de campos o un rango de campos. Ésta es la opción más utilizada.-b
(--bytes=LIST
): Seleccione especificando un byte, conjunto de bytes o rango de bytes.-c
(--characters=LIST
): seleccione especificando un carácter, conjunto de caracteres o rango de caracteres.
Otras opciones son:
-d
(--delimiter
): especifica un delimitador que se utilizará en lugar del delimitador "TAB" predeterminado.--complement
- integrar la selección. Cuando se usa esta opción, cut mostrará todos los bytes, caracteres o campos excepto los seleccionados.-s
(--only-delimited
): de forma predeterminada, cortar imprimirá cualquier línea que no contenga caracteres delimitadores. Cuando se utiliza esta opción, cortar no imprime líneas que no contienen delimitadores.--output-delimiter
: el valor predeterminado es usar el delimitador de entrada como delimitador de salida. Esta opción le permite especificar una cadena de delimitador de salida diferente.
El comando de corte puede aceptar cero o más nombres de ARCHIVO de entrada. Si no se especifica FILE o si FILE es -
, cut leerá la entrada estándar.
El argumento LIST con las -c
-f
, -b
y -c puede ser un número entero, varios enteros separados por comas, una serie de enteros o varios rangos de enteros separados por comas. Cada intervalo puede ser uno de los siguientes:
N
el enésimo campo, byte o carácter, comenzando por 1.N-
desde el enésimo campo, byte o carácter, hasta el final de la línea.NM
del enésimo al enésimo campo, byte o carácter.-M
del primero al enésimo campo, byte o carácter.
Cortar por campo
El comando Cortar se usa principalmente para mostrar campos seleccionados de cada línea de archivo o entrada estándar. Si no se especifica, el delimitador predeterminado es TAB.
En los siguientes ejemplos, usaremos el archivo test.txt. Todos los campos están separados por pestañas.
321:235 7689 M:2354 Admin 02:11:1980
345:956 1254 M:5765 Sales 12:03:1979
Para mostrar los campos 1 y 3, debe usar:
cut test.txt -f 1,3
321:235 M:2354
345:956 M:5765
O si desea mostrar del 1 ° al 4 ° campo:
cut test.txt -f -4
321:235 7689 M:2354 Admin
345:956 1254 M:5765 Sales
Cortar basado en un delimitador
Para cortar según un delimitador, use la -d
seguida del delimitador que desea usar.
Por ejemplo, para mostrar el primer y tercer campo utilizando ":" como delimitador, escriba:
cut test.txt -d ':' -f 1,3
321:7689 Admin 01
345:1254 Sales 11
Puede utilizar cualquier carácter individual 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
Integrar la selección
Para completar la lista de campos de selección, use la opción --complement
. Esto solo imprimirá aquellos campos que no estén seleccionados con la opción -f
El siguiente comando imprimirá todos los campos excepto el primero y tercero:
cut test.txt -f 1,3 --complement
7689 Admin 02:11:1980
1254 Sales 12:03:1979
Especificar un delimitador de salida
Para especificar el delimitador de salida, use la opción --output-delimiter
Por ejemplo, para establecer el delimitador de salida en _
:
cut test.txt -f 1,3 --output-delimiter='_'
321:235_M:2354
345:956_M:5765
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, tuvo en cuenta todas las letras, números y símbolos necesarios para trabajar con inglés. La tabla de caracteres ASCII tiene 128 caracteres y cada carácter está representado por un byte. A medida que las computadoras comenzaron a ser populares en todo el mundo, las empresas de tecnología comenzaron a introducir nuevas codificaciones de caracteres para diferentes idiomas y para idiomas con más de 256 caracteres, no fue posible una asignación simple 1 a 1. Esto genera diferentes problemas, como compartir documentos o navegar por sitios web y se necesitaba un nuevo estándar Unicode que pudiera 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 desde 1 byte hasta 4 bytes.
En los ejemplos siguientes, usamos el ü
que requiere 2 bytes.
Utilice la -b
( --bytes
) para recortar una sección de una línea especificando una posición en bytes.
Seleccione el quinto byte:
echo 'drüberspringen' | cut -b 5
b
Seleccione el byte 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
En el momento de escribir este artículo, la versión de recorte incluida en GNU coreutils no tiene una opción para recortar por carácter. Cuando se usa la -c
cortar, se comporta de la misma manera que cuando se usa la opción -b
Ejemplos de corte
El comando de corte se usa generalmente junto con otros comandos a través de tuberías. Aquí hay unos ejemplos.
Obtenga una lista de todos los usuarios
La salida del getent passwd
se pasa al cut
que imprime el primer almacenado usando :
como delimitador.
getent passwd | cut -d ':' -f1
Ver los 10 comandos más utilizados
En el siguiente ejemplo, el recorte se utiliza para eliminar los primeros 8 bytes de cada línea de la salida del comando de history
history | cut -c8- | sort | uniq -c | sort -rn | head
Conclusión
A estas alturas ya debería tener un buen conocimiento de cómo utilizar el comando cut de Linux. Si bien es muy útil, el comando de corte tiene algunas limitaciones. No admite la especificación de más de un carácter como delimitador y no admite varios decímetros.