GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué constituye un 'campo' para el comando de corte?

El término "campo" a menudo se asocia con herramientas como cut y awk . Un campo sería similar a una columna de datos, si toma los datos y los separa usando un carácter específico. Normalmente, el carácter utilizado para hacer esto es un Espacio .

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, , ).
  • cortar =cut -d"," ... - se separaría por comas (es decir, , ).

Ejemplos

Este primero muestra cómo awk se dividirá automáticamente en espacios.

$ echo "The rain in Spain." | awk '{print $1" "$4}'
The Spain.

Este muestra cómo cut también se dividirá en espacios.

$ echo "The rain in Spain." | cut -d" " -f1,4
The Spain.

Aquí tenemos una lista CSV de datos de columna que estamos usando cut para 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 hábil para lidiar con una variedad de personajes separados. Aquí se trata de Pestañas junto con Espacios donde se entremezclan 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, simplemente le dice a cut para no imprimir ninguna línea que no contenga el carácter delimitador especificado a través del -d cambiar.

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 tabulaciones en la segunda cadena de arriba.

Ahora, cuando procesamos estas cadenas usando cut con y sin el -s cambiar:

$ 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 puedes ver que el -s switch ha omitido cualquier cadena de la salida que no contenga el delimitador, Espacio .


Un campo según POSIX es cualquier parte de una línea delimitada por cualquiera de los caracteres en IFS , el "separador de campo de entrada (o separador de campo interno )." El valor predeterminado de esto es espacio, seguido de un tabulador horizontal, seguido de una nueva línea. Con Bash puede ejecutar printf '%q\n' "$IFS" para ver su valor.


Depende de la utilidad en cuestión, pero para cut , un "campo" comienza al principio de una línea de texto e incluye todo hasta la primera pestaña. El segundo campo va desde el carácter después de la primera pestaña, hasta la siguiente pestaña. Y así sucesivamente para el tercero, cuarto, ... Todo entre tabulaciones, o entre el inicio de la línea y la tabulación, o entre la tabulación y el final de la línea.

A menos que especifique un delimitador de campo con la opción "-d":cut -d: -f2 obtendría todo entre el primer y el segundo carácter de dos puntos (':').

Otras utilidades tienen definiciones diferentes, pero un carácter de tabulación es común. awk es una buena alternativa si cut es demasiado estricto, como awk divide 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 tienes que saber un poco de sintaxis. Para imprimir el segundo campo según awk :

awk '{print $2}'

sort es el que me engaña. Mi sort actual La página de manual dice algo así como "transición de no en blanco a en blanco" para un separador de campo. Por alguna razón, toma algunos intentos para obtener sort campos definidos correctamente. join aparentemente usa campos "delimitados por espacios en blanco", que es lo que awk pretende hacer por defecto.

La moraleja de la historia es tener cuidado y experimentar si no sabes.


Linux
  1. ¿Necesita el 'incorporado' incorporado?

  2. ¿Qué es el comando de árbol en Ubuntu?

  3. comando cut o awk para imprimir el primer campo de la primera fila

  4. Separador de campo predeterminado para awk

  5. ¿Cuál es el equivalente del comando updatedb de Linux para Mac?

Consejos para usar el comando superior en Linux

3 gestores de contraseñas para la línea de comandos de Linux

¿Qué es el comando Watch de Linux + ejemplos?

El tutorial del comando fc con ejemplos para principiantes

¿Qué define el tamaño máximo para un solo argumento de comando?

¿Qué es el comando matar en Linux?