В форуме VirtualBox есть сообщение на форуме, напрямую связанное с Ubuntu Desktop 12.10 и работающее 3D-ускорение. Есть определенные смешанные результаты.
Ubuntu 12.10 «Практически» Невозможно
Вы можете использовать awk для печати длины каждой строки (length()) и номера строки (NR), затем обратного (-r) sort результата по номеру (-n) :
$ awk '{ print length(), NR, $0 | "sort -rn" }' tmp.txt
10 3 abracadabr
8 4 mu mu mu
7 2 tatatat
6 1 lalala
Чтобы показать только первую строку:
$ awk '{ print length(), NR, $0 | "sort -rn" }' tmp.txt | head -n 1
10 3 abracadabr
AO (N) может быть достигнуто с помощью одного слота perl:
perl -e 'while (<>) { if (length > length $max) { $max=$_}}; print $max'
(где machin - это имя файла)
cat machin | perl -e 'while (<>) { if (length > length $max) { $max=$_}}; print $max'
или
perl -e 'while (<>) { if (length > length $max) { $max=$_}}; print $max' machin
или (менее ясно, но короче)
perl -ne 'if(length>length$m){$m=$_};END{print$m}' machin
O (n) Для машин, например OpenWRT, где perl недоступен, может быть полезно @ awk @ version.
awk 'length > l {l=length;line=$0} END {print line}' FILE
или питон:
python -c "print max(open('$file', 'r'), key=len)"
Ответ Radu вполне достаточен и предпочтителен, хотя, если вы хотите более явное и основанное на оболочке решение, вы можете использовать следующий скрипт:
#!/bin/bash
longest_length=0
longest_string=0
while IFS= read -r line
do
if [ "${#line}" -gt "$longest_length" ]
then
longest_length="${#line}"
longest_string="$line"
fi
done < "$1"
# Additional check, in case the file doesn't end in newline
if [ -n "$line" ]
then
if [ "${#line}" -gt "$longest_length" ]
then
longest_length="${#line}"
longest_string="$line"
fi
fi
echo "$longest_string"
Использование: ./find_longest.sh input.txt
Пример:
$ cat input.txt
1 2
2 3 a a a a
4 5 6
1 1 1 5
$ ./find_longest.sh input.txt
2 3 a a a a