VNC работает на портах 5900 и выше; 5900 за службу, я думаю, тогда 5900+ n для каждого n рабочих столов пользователей.
поэтому, если вы, например, седьмой пользователь и получаете рабочий стол :7 , вам потребуется порт 590 7 в дополнение к 5900, открытому в вашем брандмауэр .
В зависимости от вашего дистрибутива Linux, они иногда управляют только несколькими портами вверх или 5900, ваши 10 -15 клиентов, вероятно, превышают это количество, и ваш брандмауэр может блокировать VNC для этих рабочих столов.
нередкая но не обязательно правильная практика заключается в том, чтобы просто открыть порты 5900 :5999 в вашем брандмауэре, что будет учитывать до 99 пользователей... или отключить брандмауэр, если это приемлемо в вашей локальной сети
Что-то вроде:
{
head -n 1 file.txt &&
tail -n+2 file.txt |
sort -t $'\t' -nrk 3 |
awk -F '\t' 's[$2] && s[$2] > $3 { next }{ s[$2] = $3 } 1'
} >outfile.txt
head -n1
для печати заголовка.
tail -n+2
, чтобы пропустить заголовок и остаток канала для обработки.
sort
Выполните числовую обратную сортировку (от большего к меньшему)(-rn
). Сортировка по столбцу 3(-k 3
)ввода, разделенному вкладками (-t $'\t'
-, может быть удалена, если в столбце имени или темы )нет пробелов.
awk
Печатать строку до тех пор, пока объект не виден, или она равна последней. -F '\t'
Установить разделитель полей на табуляцию. Может быть удалено, если столбец имени и темы не содержит пробелов.
s[$2] && s[$2] > $3 { next }
Далее; если s[subject]
установлено и больше текущего значения (, наивысший балл ). {s[$2] = 1}
установитьs[subject] = score
1
печать Если вас не смущает заголовок в последней строке и вам не нужно учитывать имена или темы с пробелами (как в :их нет )- его можно было бы сократить до:
sort -nrk3 file.txt | awk ' s[$2] && s[$2] > $3{next}{s[$2]=$3}1'
awk 'BEGIN{ FS=OFS="\t" }
NR==1 { print; next }
max[$2]<$3 || NR==2{ max[$2]=$3; data[$2]=$0; next }
max[$2]==$3 { data[$2]= data[$2] ORS $0 }
END{ for(x in data) print data[x] }' infile
BEGIN{ FS=OFS="\t" }
, установите символ табуляции \t
в качестве разделителя F поля S для ввода и O вывода F поля ] S сепаратор для выхода. NR==1{ print; next }
, выходной заголовок строки -. max[$2]<$3 || NR==2{ max[$2]=$3; data[$2]=$0; next }
, обновите и сохраните наивысший балл по каждому предмету, а также сохраните всю строку для этого предмета с наивысшим баллом. max[$2]==$3{ data[$2]= data[$2] ORS $0 }
, добавьте те записи с одинаковым наивысшим баллом по каждому одному и тому же предмету. END{ for(x in data) print data[x] }
, выполните цикл по массиву данных и распечатайте окончательный результат. Используйте GNU sort
для сортировки и uniq
для выбора только первого для каждого предмета:
sort -t '\t' -r -k 2 -k 3n scores.txt | uniq -f 1 -w 7
-k 2
выполняет сортировку по теме (2-е поле )и-k 3n
n
сортирует по цифрам по счету (3-е поле ). Опция -r
меняет порядок сортировки на обратный, так что наивысший результат будет первым.
Теперь uniq
удаляет двойные предметы, пропуская первое поле с -f 1
и сравнивая только 5, поэтому это не удастся для предметов, которые имеют общие первые 5 символов, таких как HistoryA
и HistoryB
.
Что касается команды uniq
с опцией -f
, то первое поле не должно содержать пробелов, иначе будет неверный вывод, так как при этом поле представляет собой набор пробелов (обычно пробелы и/или TAB ), затем не -пустые символы. в некоторых конкретных версиях и только в Debian uniq
была опция -t
для указания разделителя полей, но теперь она удалена из соображений совместимости.
GNU datamash
также является опцией:
{
# Print header
head -n1 scores.txt
# Group columns by subject,score,remarks
<scores.txt datamash --header-in -s groupby 2,3,4 collapse 1 |
# Output maximum score
datamash -f groupby 1 max 2 |
# Re-shuffle columns to desired format
datamash cut 4,1,2,3
} |
# Pretty-print columns
column -s $'\t' -t
Файл теста -с несколькими учащимися с максимальным -баллом:
name subject score remarks
john Math 67 satis
lewis History 56 poor
sarah Math 89 good
fiona Geo 65 satis
fiona Math 65 satis
george History 99 very good
carl History 99 very good
Выход:
name subject score remarks
fiona Geo 65 satis
george,carl History 99 very good
sarah Math 89 good
awk 'NR==FNR {if ($3>max[$2]) max[$2]=$3; next} FNR==1||$3==max[$2]' file file
Два прохода по входному файлу. Первый проход отмечает наивысшие баллы, второй печатает строки. Предполагается, что баллы больше нуля.
{
head -n 1 -
sort -r -k2,2 -k3,3n
} < file |
awk '
prev != $2 {
print
prev = $2
}
'
name subject score remarks
sarah Math 89 good
george History 99 very good
fiona Geo 65 satis