Считать самую длинную строку в использовании файла в то время как считанный цикл?

Запустите программное обеспечение за обратным прокси-сервером . Есть из чего выбирать. Вероятно, наиболее популярным является nginx , но многие веб-серверы имеют способ настроить их как обратный прокси. Существуют также специальные программы обратного прокси, такие как Apache Traffic Server .

В качестве альтернативы, если вы работаете в Linux, вы можете выполнить переадресацию портов NAT через iptables .

Предполагается, что вы можете настроить программное обеспечение для привязки к нестандартному порту. Проксирование или NAT позволит программному обеспечению появиться для привязки к стандартным портам HTTP [S].

Если программное обеспечение невозможно настроить, и у вас нет внутренней возможности взломать файлы JAR, чтобы заставить их работать на нестандартных портах, вы можете запустить программное обеспечение на виртуальной машине или на выделенной машине, где последствия запуска от имени пользователя root не столь проблематичны. Затем вы можете сделать, как и раньше: NAT или прокси для выделенного сервера / виртуальной машины, чтобы казалось, что он обслуживается непосредственно с машины, обращенной к пользователю.

1
13.02.2015, 06:27
3 ответа

Я в течение долгого времени я не писал, поэтому я приму любой тип критики :) Мое решение было бы чем-то вроде этого:

n=0
longest=""
while read line; do
    len=`echo $line | wc -m`
    if [ $len -ge $n ]; then
        n=$len
        longest=$line
    fi
done 

echo $longest

Я прочитал @ Cuonglm, но Я не мог думать о том, как это сделать, используя меньшие вызовы процессов. Конечно, я открыт для предложений.

Что касается вашего последнего вопроса, это действительно не имеет значения. Этот скрипт будет работать с вами, вводя в строки, или с использованием файла в качестве ввода.

0
27.01.2020, 23:51

Согласно ссылке Cuonglm, петли в следует избегать Bash .

В этом духе код ниже получает длину самой длинной линии в файле, используя awk , стандартный инструмент Unix, но без Bash :

awk '{n=length($0)>n?length($0):n} END{print n}' file

Если вы Хотите распечатать самую длинную линию, вместо того, чтобы получить свою длину, затем использовать:

awk '{longest=length($0)>length(longest)?$0:longest} END{print longest}' 
1
27.01.2020, 23:51

Вы можете получить список всех номеров строк в одну строку Заказал сначала по длине и вторым по номеру строки, начиная с самой большой ...

</path/to/infile LC_ALL=C \
tr -c \\n 1|grep -n '.\|'|sort -t: -rnk2

Метод очень просто - TR преобразует каждый входной байт, который не является \ N EWLINE персонаж к 1, GREP -N prepN prep prepn Добавьте номер каждой строки, а затем : : : : для всех линий на его входе, который сортирует , затем сортирует в обратном уровне Поле 2Cd через хвост линии как разграниченные : . Таким образом, самая длинная строка из 1S поплавает на вершину.

Вы должны остерегаться, хотя, если ввод включает многобитные символы, то это будет номер только байтом - не по символу. Для достижения последней вещи не является незначительным проведением (как я понимаю) .

В любом случае - в языковой основе ASCII - вышеупомянутое должно быть очень быстро даже для очень больших входов. И это требует очень мало, чтобы быть полным решением:

f=/path/to/file
n=$(<"$f" tr -c \\n 1|grep -n '.\|'|sort -t: -rnk2|head -n1)
l=$(<"$f" head -n"${n%:*}"|tail -n1)
printf "Line #%s at #${#l} bytes. Its contents:\n%s\n" \
   "${n%:*} is (possibly tied-for) the longest in $f" "$l"
0
27.01.2020, 23:51

Теги

Похожие вопросы