Команды
line_num=0
while IFS= read -r line
do
echo "${#line} $((++line_num)) $line"
done < file.txt > tmpfile.txt
создаст файл с именем tmpfile.txt
, который выглядит следующим образом:
20 1 This is many letters
11 2 This is few
2 3 Hi
29 4 This is a very long sentence.
где каждой строке предшествует ее длина и номер строки.
Тогда sort -n tmpfile.txt
приведет к:
2 3 Hi
11 2 This is few
20 1 This is many letters
29 4 This is a very long sentence.
который отсортирован по длине строки.
Затем вы можете отправить это head -n1
чтобы получить первую строку (т. Е. Самую короткую строку), или tail -n1
чтобы получить последнюю строку (т. Е. Самую длинную строку).
Или используйте sort -nr
чтобы изменить порядок, так что вы можете использовать head -n1
чтобы получить самую длинную строку.
(Это может быть бесконечно более эффективно, чем использование tail
.)
Если вы хотите видеть только самую короткую строку, вы можете использовать канал и избегать создания временного файла:
line_num=0
while IFS= read -r line
do
echo "${#line} $((++line_num)) $line"
done < file.txt | sort -n | head -n1
Это, вероятно, будет более эффективным в awk
.