Eu usaria awk
e algo assim:
awk -F " " '{print length($0), NF-1, $0}' file.txt
Se você tiver vários espaços, use este:
awk '{NS=gsub(" "," ",$0); print length($0), NS, $0}' file.txt
-
gsub
substitui cada espaço por um espaço e retorna a contagem desse processo, que é o número de espaços.
Digamos que recebemos um arquivo com este conteúdo:
here is something
here is something el s
here is something else
and agai n
and a a aa
o outpout do comando acima é:
17 2 here is something
22 4 here is something el s
22 3 here is something else
10 2 and agai n
10 3 and a a aa
A primeira coluna é o número de caracteres, o segundo é o número de espaços.
Em seguida, enviamos para sort
e sort
faremos o trabalho e, depois de tudo, posso usar o corte para obter apenas o conteúdo do arquivo original:
awk -F " " '{print length($0), NF-1, $0}' file.txt | sort -k1n,2 | cut -f3- -d' '
Para a segunda solução:
awk '{NS=gsub(" "," ",$0); print length($0), NS, $0}' file.txt | \
sort -k1n,2 | cut -f3- -d' '
E a saída final é:
and agai n
and a a aa
here is something
here is something else
here is something el s
Você pode alterar -F " "
com seu caractere específico como "R":
awk -F "R" ...
ou
gsub("R","R",$0)
para o segundo.