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
sedpara 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
awkque divide campos em vários separadores de campos subsequentes:awk '{print $2}' < input