Se você quer o primeiro campo espaço -separado com cut
, então você tem que dizer para usar espaços ao invés do padrão de TABs:
-d, --delimiter=DELIM
use DELIM instead of TAB for field delimiter
Assim que você disser cut
para usar espaços como o delimitador, é isso que ele usa, e então "campo 2" se torna o primeiro byte (s) após o primeiro espaço (até ver outro delimitador); no seu caso, isso é um espaço.
Use esses dados como um exemplo ilustrativo:
root 1space 2space 3space
... onde há um espaço antes de 1space
, dois antes de 2space
e três antes de 3space
.
$ seq 1 7 | while read index; do echo "$index" - "$(cut -d' ' -f $index < input)"; done
1 - root
2 - 1space
3 -
4 - 2space
5 -
6 -
7 - 3space
Como você tem um número variável de espaços para separar os campos na entrada, sugiro que:
- Se você estiver "alterando" os dados, use
sed
para reduzir vários espaços para um, como mostrou o steeldriver:sed 's/ */ /g' < input | cut -d' ' -f2
. - Caso contrário, considere uma ferramenta como
awk
que divide campos em vários separadores de campos subsequentes:awk '{print $2}' < input