Como posso usar a coluna para delimitar nas guias e não nos espaços?

53

Gostaria de usar o comando Unix column para formatar algum texto. Eu tenho campos delimitados por guias, mas dentro de cada campo também há espaços. column delimita no espaço em branco (tabulações e espaços). Como posso fazer a coluna usar apenas guias como o delimitador?

Eu estava tentando especificar a guia como o delimitador usando:

cat myfile | column -t -s"\t"
    
por turtle 30.11.2012 / 10:36

4 respostas

70

column -t -s '\t'

separaria colunas em \ e t caracteres.

column -s \t é o mesmo que column -s t , pois a barra invertida é interpretada como um operador de cotação pelo shell.

Aqui você deseja passar um caractere TAB real para a coluna. Com ksh93, zsh, bash, mksh, busybox sh ou FreeBSD sh:

column -ts $'\t'

Ou insira um caractere de tabulação real digitando Ctrl-V Guia no prompt do shell (entre aspas ou precedido por uma barra invertida, pois o caractere de tabulação é um separador de token a sintaxe shell da mesma forma que espaço), ou use "$(printf '\t')" (aspas duplas necessárias para desabilitar o operador split + glob como o caractere de tabulação também está no valor padrão de $IFS ).

    
por 30.11.2012 / 13:57
3

O -t é para selecionar o número de colunas que você deseja. Deixar isso em branco não muda nada. Além disso, você deseja espaço em branco após o -s , então tente:

cat myfile | column -s \t

    
por 30.11.2012 / 11:04
2

Eu usei o seguinte (só funciona se o seu texto não contém | ):

cat myfile | tr '\t' '|' | column -t -s '|'

Isso apenas substitui as guias por pipes e, em seguida, usa colunas com pipes como delimitadores.

(Eu fiz isso porque eu não vi nada na resposta de Stéphane que funcionou de imediato na concha de peixe. Caso contrário, a resposta de Stéphane parece boa.)

    
por 17.07.2017 / 04:07
0

Para POSIX, $'...' , conhecido como escape ANSI-C, não está definido.

Em vez disso, você pode usar $(printf '\t') :

column -t -s "$(printf '\t')"

$(printf '1') pode ser usado, pois 011 (representação octal do decimal 9) é o código ANSI para um caractere de tabulação horizontal:

column -t -s "$(printf '1')"

No entanto, veja o comentário abaixo, de Stéphane Chazelas, sobre por que isso pode não ser consistente em todas as versões do shell.

    
por 10.09.2018 / 16:48