Como definir o delimitador ‘tab’ com ‘cut’ no Bash?

Como definir o delimitador ‘tab’ com ‘cut’ no Bash?

Aqui está um exemplo de como cutdividir a entrada em campos usando um delimitador de espaço e obter o segundo campo:

cut -f2 -d' '

Como o delimitador pode ser definido como uma tabulação, em vez de um espaço?

Responder1

Dois caminhos:

Pressione Ctrl+ Ve depois Tabpara usar "literalmente"inserção citada.

cut -f2 -d'   ' infile

ou escreva assim para usarCitação ANSI-C:

cut -f2 -d$'\t' infile

A $'...'forma de aspas não faz parte da linguagem shell POSIX (ainda não), mas funciona pelo menos em ksh, mksh, zsh e Busybox além do Bash.

Responder2

Guia é o padrão.

Veja ocortar página de manual.

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

Então você pode simplesmente escrever

cut -f 2

Responder3

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

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

Responder4

Alternativamente, pode-se envolver cut em uma função.

function getColumns ()
{
    local -r delimiter="${1:?}"
    local -r columns="${2:?}"

    if [[ "$delimiter" == '\t' || "$delimter" == "tab" ]]; then
        cut "--fields=${columns}"
        return
    fi

    cut "--delimiter=${delimiter}" "--fields=${columns}" 
}

informação relacionada