El término "campo" a menudo se asocia con herramientas como cuty awk. Un campo sería similar a una columna de datos, si toma los datos y los separa con un carácter específico. Por lo general, el personaje utilizado para hacer esto es a Space.
Sin embargo, como es el caso con la mayoría de las herramientas, es configurable. Por ejemplo:
- awk =
awk -F"," ...- se separaría por comas (es decir ,).
- cut =
cut -d"," ...- se separaría por comas (es decir ,).
Ejemplos
Este primero muestra cómo awkse dividirá automáticamente en los espacios.
$ echo "The rain in Spain." | awk '{print $1" "$4}'
The Spain.
Este muestra cómo cutse dividirá en espacios también.
$ echo "The rain in Spain." | cut -d" " -f1,4
The Spain.
Aquí tenemos una lista CSV de datos de columna que estamos utilizando cutpara devolver las columnas 1 y 4.
$ echo "col1,col2,col3,co4" | cut -d"," -f1,4
col1,co4
Awk también puede hacer esto:
$ echo "col1,col2,col3,co4" | awk -F"," '{print $1","$4}'
col1,co4
Awk también es un poco más experto en tratar con una variedad de personajes de separación. Aquí se trata Tabsjunto con Spacesdónde se mezclan al mismo tiempo:
$ echo -e "The\t rain\t\t in Spain." | awk '{print $1" "$4}'
The Spain.
¿Qué pasa con el interruptor -s para cortar?
Con respecto a este interruptor, es simplemente decirle cutque no imprima ninguna línea que no contenga el carácter delimitador especificado a través del -dinterruptor.
Ejemplo
Digamos que teníamos este archivo.
$ cat sample.txt
This is a space string.
This is a space and tab string.
Thisstringcontainsneither.
NOTA: Hay espacios y pestañas en la segunda cadena de arriba.
Ahora cuando procesamos estas cadenas usando cutcon y sin el -sinterruptor:
$ cut -d" " -f1-6 sample.txt
This is a space string.
This is a space
Thisstringcontainsneither.
$ cut -d" " -f1-6 -s sample.txt
This is a space string.
This is a space
En el segundo ejemplo se puede ver que el -sinterruptor ha omitido ningún tipo de condiciones de la salida que no contienen el delimitador, Space.
echo '$IFS' | cat -vetpara ver cómo se ve el valor predeterminado enshell.cutcuál fue la pregunta formulada.cut -d "$IFS"será un error, mientras queawk -F"[ \t\n]"funciona como se esperabaDepende de la utilidad en cuestión, pero para
cut, un "campo" comienza al comienzo de una línea de texto e incluye todo hasta la primera pestaña. El segundo campo va desde el personaje después de la primera pestaña, hasta la siguiente pestaña. Y así sucesivamente para el tercero, cuarto, ... Todo entre pestañas, o entre el inicio de la línea y la pestaña, o entre la pestaña y el final de la línea.A menos que especifique un delimitador de campo con la opción "-d":
cut -d: -f2obtendrá todo entre el primer y el segundo carácter de dos puntos (':').Otras utilidades tienen diferentes definiciones, pero un carácter de tabulación es común.
awkes un buen retroceso sicutes demasiado estricto, ya queawkdivide los campos en función de uno o más caracteres de espacio en blanco. Eso es un poco más natural en muchas situaciones, pero hay que saber un poco de sintaxis. Para imprimir el segundo campo de acuerdo conawk:sortEs el que me engaña. Misortpágina de manual actual dice algo así como "transición de blanco a blanco" para un separador de campo. Por alguna razón, se requieren algunos intentos parasortdefinir correctamente los campos.joinaparentemente usa campos "delimitados por espacios en blanco", que es lo queawkpretende hacer por defecto.La moraleja de la historia es tener cuidado y experimentar si no lo sabes.
fuente
El término "campo" no está relacionado con Linux en general, sino con programas específicos. Entonces
cutusa un tipo diferente de campo quesort.Con
cut, usted define qué es un campo usted mismo, especificando un delimitador de campo con la opción -d, que separa los campos en cada línea.Si sus datos están separados por dos puntos en las líneas, puede combinar
-dy-fobtener los campos (o columnas) 2, 3 y 6 de esta manera:fuente
Cuando usa el
cutcomando, se necesitan dos argumentos principalesAquí el
outputestaría separado por delimitador "|" y cortará solo 2 campos del archivo de entradaSi tiene las siguientes líneas en su archivo
Luego cortará 2 campos que son
fuente
cutes ideal para casos simples, donde el delimitador es un solo carácter y desea generar un subconjunto de los campos de entrada, en el mismo orden (incluso si lo especifico-f3,2,1, actúa igual que-f1,2,3).awklas líneas simples son mucho más flexibles, por ejemplo, cuando el separador de campo de entrada puede ser cualquier espacio en blanco (awkpredeterminado), o cuando desea generar campos en un orden diferente o con un formato particular.Por ejemplo,
wc -l myfile | awk '{print $1}'ols -l file1 file2 | awk '{printf "%s,%s:%s\n", $9, $7, $3}'son muy simples, pero sería difícil hacerlocut.¡Estoy de acuerdo con los carteles anteriores de que los campos / claves
sortson difíciles de entender! Los campos enjoinparecen funcionar igual que encut, aunque lasjoinopciones son fáciles de equivocar.fuente