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

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

Por ejemplo, el cutcomando puede tomar un parámetro -f, que segúnman

seleccione sólo estos campos; También imprima cualquier línea que no contenga ningún carácter delimitador, a menos que se especifique la opción -s.

En este contexto, ¿qué es un campo?

Respuesta1

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 usando un carácter específico. Normalmente el carácter utilizado para hacer esto es un Space.

Sin embargo, como ocurre 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 espacios.

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

Este cuttambién muestra cómo 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 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 hábil a la hora de lidiar con una variedad de personajes de separación. Aquí se trata de Tabsdónde Spacesse 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 modificador, simplemente indica cutno imprimir ninguna línea que no contenga el carácter delimitador especificado mediante el -dmodificador.

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 cutcon y sin el -smodificador:

$ 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, puede ver que el -sconmutador ha omitido cualquier cadena de la salida que no contenga el delimitador Space.

Respuesta2

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

Respuesta3

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 pestañas, o entre inicio de línea y pestaña, o entre pestaña y final de línea.

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

Otras utilidades tienen definiciones diferentes, pero el carácter de tabulación es común. awkes una buena alternativa si cutes demasiado estricta, ya que awkdivide los campos en función de uno o más espacios en blanco. Esto es un poco más natural en muchas situaciones, pero hay que conocer un poco de sintaxis. Para imprimir el segundo campo según awk:

awk '{print $2}'

sortes el que me engaña. Mi página de manual actual sortdice algo así como "transición de no en blanco a en blanco" para un separador de campo. Por alguna razón, se necesitan algunos intentos para sortdefinir los campos correctamente. joinaparentemente utiliza campos "delimitados por espacios en blanco", que es lo que awkpretende hacer de forma predeterminada.

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

Respuesta4

Cuando usas cutel comando, se necesitan dos argumentos principales.

-d: que significa delimitador

-f: que representa el campo que se cortará del archivo de entrada

Ex. cut - d "|"  - f1, 2 input_filename

Aquí outputestarían separados por el delimitador "|" y cortará solo 2 campos del archivo de entrada

Si tiene las siguientes líneas en su archivo

Alex|120000|Admin|1999

Luego cortará 2 campos que son

Alex|120000

información relacionada