Comprimento em cadeia de várias linhas

2

Eu tenho uma string multilinha como segue

"this is a sample
this is a second sample
same length the 1 above
this is a third sample"

Existe alguma maneira de descobrir qual (is) linha (s) tem o comprimento máximo (em termos de número de caracteres) e qual é o comprimento. Na amostra acima, essa seria a segunda e terceira linha.

    
por wazza 06.09.2017 / 16:15

3 respostas

3

string="this is a sample
this is a second sample
same length the 1 above
this is a third sample"

printf '%s\n' "$string" | awk -v max=-1 '
  {l = length}
  l > max {max = l; output = "Max length: " max RS}
  l == max {output = output NR ": " $0 RS}
  END {if (max >= 0) printf "%s", output}'

Saídas:

Max length: 23
2: this is a second sample
3: same length the 1 above
    
por 06.09.2017 / 16:27
0
echo "this is a sample
this is a second sample
this is a third sample" | \
while read line; do 
  echo ${#line} $line
done | sort -n

fornece a lista de linhas com tamanho, classificadas por tamanho

    
por 06.09.2017 / 16:30
0

Estatísticas totais com as linhas mais longas topo usando a solução GNU awk :

awk 'BEGIN{ PROCINFO["sorted_in"]="@ind_num_desc" }
     { len=length; a[len]=(a[len])? a[len]", "NR:NR }
     END{ for(i in a) printf "Length: %s, row number(s): %s\n",i,a[i] }' file

A saída:

Length: 23, row number(s): 2, 3
Length: 22, row number(s): 4
Length: 16, row number(s): 1
    
por 06.09.2017 / 16:56