
Por ejemplo, el cut
comando 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 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 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 awk
se dividirá automáticamente en espacios.
$ echo "The rain in Spain." | awk '{print $1" "$4}'
The Spain.
Este cut
tambié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 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 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 cut
no imprimir ninguna línea que no contenga el carácter delimitador especificado mediante el -d
modificador.
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
modificador:
$ 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 -s
conmutador 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: -f2
obtendrá 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. awk
es una buena alternativa si cut
es demasiado estricta, ya que awk
divide 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}'
sort
es el que me engaña. Mi página de manual actual sort
dice 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 sort
definir los campos correctamente. join
aparentemente utiliza campos "delimitados por espacios en blanco", que es lo que awk
pretende hacer de forma predeterminada.
La moraleja de la historia es tener cuidado y experimentar si no lo sabes.
Respuesta4
Cuando usas cut
el 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í output
estarí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