Os comandos
line_num=0
while IFS= read -r line
do
echo "${#line} $((++line_num)) $line"
done < file.txt > tmpfile.txt
criará um arquivo chamado tmpfile.txt
, que se parece com isto:
20 1 This is many letters
11 2 This is few
2 3 Hi
29 4 This is a very long sentence.
onde cada linha é precedida por seu comprimento e seu número de linha.
Então sort -n tmpfile.txt
produzirá:
2 3 Hi
11 2 This is few
20 1 This is many letters
29 4 This is a very long sentence.
, que é classificado por comprimento de linha.
Você pode enviar isso para head -n1
para obter a primeira linha
(isto é, a linha mais curta)
ou tail -n1
para obter a última linha (ou seja, a linha mais longa).
Ou use sort -nr
para reverter o pedido
então você pode usar head -n1
para obter a linha mais longa.
(Isso pode ser infinitesimalmente mais eficiente do que usar tail
.)
Se você quiser ver apenas a linha mais curta, você pode usar um pipe e evitar criar o arquivo temporário:
line_num=0
while IFS= read -r line
do
echo "${#line} $((++line_num)) $line"
done < file.txt | sort -n | head -n1
Isso provavelmente seria mais eficiente em awk
.