¿Cómo definir el delimitador 'tab' con 'cut' en BASH?


Respuestas:


301

Dos caminos:

Presione Ctrl+ Vy luego Tab.

cut -f2 -d'   ' infile

o escríbelo así:

cut -f2 -d$'\t' infile

10
$ '' - bash'ism, AFAIR
poige

8
Ninguno de los dos funciona en Windows (por ejemplo, Git Bash) obviamente. Use la respuesta de @ Mikel allí (el delimitador predeterminado es tab, simplemente omita el -dargumento).
Ahmed Fasih el


44
@poige, eso viene ksh93, no bash. Al menos, es compatible con ksh93, zsh, bash, mksh y FreeBSD sh ( podría llegar a la próxima reversión importante de la especificación estándar POSIX parash ).
Stéphane Chazelas


191

La pestaña es la predeterminada.

Vea la página del manual de corte .

-d delim
         Use delim as the field delimiter character instead of the tab
         character.

Entonces deberías escribir

cut -f 2

2
Oops no notó esa línea.
Muhammad Hasan Khan

44
Pero probablemente siempre sea más seguro mencionar dichos indicadores explícitamente, tanto para la legibilidad como para la portabilidad. Me imagino que algunas personas que diseñan un cutpara Windows no seguirían el estándar completo.
Willem Van Onsem

3
Esto debería aceptarse respuesta: código más simple, explicación más simple. ya lo logró: youtube.com/watch?v=dpNTHl7y45Y
neuronet

55
Esta respuesta ha cambiado mi vida
matheeeny

1
@WillemVanOnsem, si alguien escribe una versión de cutWindows y no sigue la especificación POSIX , no hay razón para suponer que cualquier script POSIX funcionará con ese sistema. Apéguese a las características especificadas por POSIX. No intente permitir implementaciones hipotéticas futuras no conformes; eso no es lo que significa "portabilidad".
Comodín

12
awk -F '\t' '{ print $2 }' inputfile

Esto extrae el segundo campo delimitado por tabulaciones de cada línea de entrada inputfile.


10

Más genéricamente, sin requerir caracteres invisibles: se usa trpara convertir los delimitadores a un formato que se pueda especificar más fácilmente cut.

$ echo -e "a\tb\tc" |tr '\t' ' ' |cut -d' ' -f2
b

tr es una herramienta simple, pero poderosa, de coincidencia y reemplazo de personajes.


1
Pero, ¿y si la entrada es abc(space)def(tab)ghi? Su respuesta cederá def, pero debería ceder ghi. Del mismo modo, si la entrada es ABC(tab)DEF(space)GHI, su respuesta rendirá DEF, pero debería rendir DEF(space)GHI.
G-Man

@ G-Man: El delimitador de espacio fue solo un ejemplo. Utilice el delimitador apropiado para sus datos, por ejemplo, una coma. echo -e "abc\tdef ghi" |tr '\t' ',' |cut -d',' -f2
nobar

... Pero sí, si el delimitador debe ser una pestaña, entonces mi enfoque no funcionará.
nobar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.