Por que eu preciso de opção -d neste comando de corte?

0

Eu tenho um arquivo de texto chamado sales.txt

Fred apples 20 April 4
Susy oranges 5 April 7
Mark watermelons 12 April 10
Terry peaches 7 April 15

E quando eu uso este comando:

[root@ip-10-0-7-125 bash-tut]# cat sales.txt | cat /dev/stdin | cut -d' ' -f 2,3 | sort
20 April
oranges 5
peaches 7
watermelons 12

O ponto é que se eu remover a parte -d '', eu tenho todo o campo do arquivo de texto.

[root@ip-10-0-7-125 bash-tut]# cat sales.txt | cat /dev/stdin | cut -f 2,3 | sort
Mark watermelons 12 April 10
pples 20 April 4
Susy oranges 5 April 7
Terry peaches 7 April 15
[root@ip-10-0-7-125 bash-tut]# man cut

Por que isso aconteceu? Eu estava procurando a opção d na man page e ela dizia: -d significa apenas delimitador de campo.

    
por The One 11.04.2016 / 04:43

1 resposta

2

A página man do meu sistema diz:

   -d, --delimiter=DELIM
          use DELIM instead of TAB for field delimiter

Portanto, se você não especificar -d , cut assumirá que seus campos estão separados por TAB caracteres. Seu arquivo de entrada não contém caracteres TAB . Enquanto isso, a man page também diz:

   -f, --fields=LIST
          select only these fields;  also print any line that contains  no
          delimiter character, unless the -s option is specified

A parte chave é "também imprime qualquer linha que não contenha caractere delimitador". Isto é o que você tem: cada linha no seu arquivo contém "nenhum caractere delimitador".

    
por 11.04.2016 / 04:49

Tags