Postagem em destaque

Criando bot do Telegram em Shell script com ShellBot

Remover seções de cada linha de arquivos

Sobre

Remover seções de cada linha de arquivos para saída padrão.

Descrição

O comando cut é utilizado para remover seções em cada linha de um arquivo - “cortar” colunas de dados separadas por um caractere delimitador comum, e imprimi-las na saída padrão. Se o delimitador for omitido, assume espaço como delimitador padrão. O arquivo original não é modificado.

Para mais detalhes, consulte o manual: cut(1)


Uso

cut [OPÇÃO]... [ARQUIVO]...

Exemplos:

Para nosso exemplo, criei um arquivo chamado dados.txt com o seguinte conteúdo.
um dois três quatro cinco seis
primeiro segundo terceiro quarto quinto sexto
1 2 3 4 5 6
Note que as expressões são separadas por um delimitador ( ) espaço. Um delimitador determina o comportamento e a forma como as colunas são selecionadas.

 

1. Selecionando um determinado campo.

1.1 Selecionando apenas o 2º campo de cada linha. Para isso precisamos informar o delimitador que iremos tratar, utilizando o parâmetro -d.
$ cut -d' ' -f 2 dados.txt
dois
segundo
2
O campo especificado pode estar junto ao parâmetro -f. Dessa forma: -f2, que não haveria problemas. O motivo de menciona-lo separado é apenas para facilitar a leitura da sintaxe.
1.2 Selecionando o 4º campo
$ cut -d' ' -f 4 dados.txt
quatro
quarto
4


2. Selecionando múltiplos campos.

Além de especificar somente uma linha, também podemos selecionar múltiplos campos, separando-os por uma (,) vírgula.
2.1 Selecionando os campos 1 e 3
$ cut -d' ' -f 1,3 dados.txt
um três
primeiro terceiro
1 3
2.2 Selecionado os campos 1,4 e 6.
$ cut -d' ' -f 1,4,6 dados.txt
um quatro seis
primeiro quarto sexto
1 4 6


3. Selecionando um intervalo de campos.

Podemos especificar um intervalo onde somente os campos dentro desse intervalo serão capturados, enquanto os demais ignorados.
3.1 Selecionado o 3ª campo e todos os campos em diante, ignorando os anteriores.
$ cut -d' ' -f 3- dados.txt
três quatro cinco seis
terceiro quarto quinto sexto
3 4 5 6
É útil quando lidamos com um número desconhecido de campos ou quando precisamos especificar vários campos em uma única linha de comando.
Podemos especificar o campo inicial e final de nosso intervalo. Utilizando o (-) hífen entre eles.
 
3.2 Selecionado somente do 2º até o 4º campo.
$ cut -d' ' -f 2-4 dados.txt
dois três quatro
segundo terceiro quarto
2 3 4
Também podemos especificar somente o intervalo final inserindo o caractere (-) hífen antes do número do campo. Isso faz com que todos os campos a partir da posição 1 sejam selecionados até a posição final especificada.
3.3 Selecionando os primeiros 4 campos.
$ cut -d' ' -f -4 dados.txt
um dois três quatro
primeiro segundo terceiro quarto
1 2 3 4


4. Combinando opções de seleção.

Além da utilização convencional, é possível combinarmos as opções em uma única linha de comando para seleção. Assim conseguimos capturar vários campos aplicando critérios distintos.
4,1 Selecionando o 1º e do 3º até o 5º campo.
$ cut -d' ' -f 1,3-5 dados.txt
um três quatro cinco
primeiro terceiro quarto quinto
1 3 4 5
4.2 Selecionando os dois primeiros campos e todos a partir do 5º.
$ cut -d' ' -f -2,5- dados.txt
um dois cinco seis
primeiro segundo quinto sexto
1 2 5 6


5. Definindo o delimitador de saída.

O delimitador de saída é uma expressão que definimos para substituir o delimitador de entrada na saída padrão do comando. Após o processamento dos dados o comando imprime os campos selecionados separando-os pelo delimitador especificado.
5.1 Imprime os primeiros 4 campos, definindo o (-) hífen como delimitador de saída.
$ cut -d' ' --output-delimiter='-' -f -4 dados.txt
um-dois-três-quatro
primeiro-segundo-terceiro-quarto
1-2-3-4
Note que o delimitador de entrad ( ) espaço, foi substituido pelo (-) hífen; retornando todos os campos separados pelo novo delimitador.
5.2 Definindo uma expressão como delimitador.
$ cat dados.txt  | cut -d' ' --output-delimiter=' <-CAMPO-> ' -f -4
um <-CAMPO-> dois <-CAMPO-> três <-CAMPO-> quatro
primeiro <-CAMPO-> segundo <-CAMPO-> terceiro <-CAMPO-> quarto
1 <-CAMPO-> 2 <-CAMPO-> 3 <-CAMPO-> 4
O delimitador de saída suporta expressões, ao contrário do delimitador de entrada que só aceita caracteres únicos.


6. Selecionando cadeia de caracteres.

Utilizando o parâmetro '-c' é possível capturar uma cadeia de caracteres dentro uma expressão.
6.1 Listando os primeiros 4 caracteres.
$ cut -c -4 dados.txt
um d
prim
1 2
O mesmo conceito de seleção de lista e intervalos se aplica a seleção de caracteres.
6.2 Listando todos os caracteres a partir do 8º caractere.
$ cut -c 8- dados.txt
 tres quatro cinco seis
o segundo terceiro quarto quinto sexto
 5 6
6.3 Listando o 1º, do 3º ao 5º e do 10º até 16º caractere.
$ cut -c 1,3-5,10-16 dados.txt
u dores qua
pimesegundo
12 3 6


7.  Trabalhando com delimitadores.

Para este exemplo vou utilizar o arquivo /etc/passwd que contém informações sobre cada usuário do sistema, um usuário por linha e cada campo de informação é delimitado por dois pontos (":").  Considere a linha que contém informações sobre o usuário root.
root:x:0:0:root:/root:/bin/bash
Esses campos contêm as seguintes informações, na seguinte ordem, separadas por um caractere de dois pontos:
  1. Nome de usuário
  2. Senha
  3. Número de identificação do usuário (UID)
  4. Número de identificação do grupo (GID)
  5. Campo de comentário
  6. Diretorio home
  7. Linha de comando
7.1 Capturando somente o nome do usuário que está no primeiro campo.
$ cut -d':' -f1 /etc/passwd
root
daemon
bin
sys
sync
games
man
7.2 Listando nome do usuário e o interpretador de comandos.
$ cut -d':' -f1,7 /etc/passwd
root:/bin/bash
daemon:/usr/sbin/nologin
bin:/usr/sbin/nologin
sys:/usr/sbin/nologin
sync:/bin/sync
games:/usr/sbin/nologin
man:/usr/sbin/nologin
7.3 Listando nome, id e home do usuário. Definindo o caractere de tabulação '\t' como delimitador de saída.
$ cut -d':' -f1,3,6 --output-delimiter=$'\t' /etc/passwd
root    0    /root
daemon  1    /usr/sbin
bin     2    /bin
sys     3    /dev
sync    4    /bin
games   5    /usr/games
man     6    /var/cache/man

Comentários

Contato

Nome

E-mail *

Mensagem *