Como definir o delimitador 'tab' com 'cut' no BASH?


Respostas:


301

Dois caminhos:

Pressione Ctrl+ Ve depois Tab.

cut -f2 -d'   ' infile

ou escreva assim:

cut -f2 -d$'\t' infile

10
$ '' - bash'ism, AFAIR
poige 30/03

8
Nem funciona no Windows (por exemplo, Git Bash) obviamente. Use a resposta de @ Mikel lá (o delimitador padrão é tab, simplesmente omita o -dargumento).
Ahmed Fasih 4/11


4
@ Poige, isso vem ksh93, não bash. Isso é suportado pelo ksh93, zsh, bash, mksh e FreeBSD sh pelo menos ( pode chegar à próxima grande reversão da especificação padrão POSIX parash ).
Stéphane Chazelas


191

Tab é o padrão.

Veja a página do manual de corte .

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

Então você deveria escrever

cut -f 2

2
Opa não percebeu essa linha.
Muhammad Hasan Khan

4
Mas é provavelmente sempre mais seguro mencionar essas bandeiras explicitamente, tanto para legibilidade quanto para portabilidade. Eu posso imaginar que algumas pessoas projetando um cutpara Windows não seguiriam o padrão completo.
Willem Van Onsem

3
Esta resposta deve ser aceita: código mais simples, explicação mais simples. você conseguiu: youtube.com/watch?v=dpNTHl7y45Y
neuronet

5
Esta resposta mudou minha vida
matheeeny

1
@WillemVanOnsem, se alguém escreve uma versão do cutWindows e não segue a especificação POSIX , não há razão para supor que qualquer script POSIX funcione com esse sistema. Atenha-se aos recursos especificados pelo POSIX. Não tente permitir futuras implementações hipotéticas não compatíveis; não é isso que "portabilidade" significa.
Curinga

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

Isso extrai o segundo campo delimitado por tabulação de cada linha de entrada inputfile.


10

Mais genericamente, sem a necessidade de caracteres invisíveis: use trpara converter os delimitadores em um formato que possa ser especificado mais facilmente cut.

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

tr é uma ferramenta simples, mas poderosa, de correspondência e substituição de caracteres.


1
Mas e se a entrada for abc(space)def(tab)ghi? Sua resposta vai render def, mas deve render ghi. Da mesma forma, se a entrada for ABC(tab)DEF(space)GHI, sua resposta renderá DEF, mas deverá render DEF(space)GHI.
G-Man

@ G-Man: O delimitador de espaço foi apenas um exemplo. Use o delimitador apropriado para seus dados - uma vírgula, por exemplo. echo -e "abc\tdef ghi" |tr '\t' ',' |cut -d',' -f2
nobar 26/03

... Mas, sim, se o delimitador precisar ser uma guia, minha abordagem não funcionará.
nobar 27/03
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.