Как и в случае с любым безопасным соединением, вы не только хотите знать, что ваше установленное соединение является конфиденциальным между взаимодействующими сторонами, а также защищено от несанкционированного доступа, но вы также хотите знать, что вы разговариваете с конечная точка, с которой вы думали, что разговариваете в первую очередь. Криптография отлично подходит для решения первой проблемы, но совсем не решает вторую (хотя и предоставляет инструмент для ее решения). Вам нужна PKI для решения второй проблемы.
SSH не имеет сложной PKI, ни сети доверия, популяризированной PGP, ни нисходящей системы сертификации, популяризированной HTTPS и SSL. В результате нельзя гарантировать, что служба, отвечающая на другом конце соединения, действительно была той, к которой вы пытались подключиться. Соединение могло быть перенаправлено на уровне TCP или IP под шифрованием, но шифрование не могло этого заметить.
Таким образом, при первом подключении к любому SSH-серверу он просит вас подтвердить внешними средствами, действительно ли отпечаток, предлагаемый сервером, соответствует отпечатку пальца сервера, к которому вы намеревались подключиться. Вы можете проверить это безопасным образом вне группы или, конечно, на свой страх и риск, вы все равно можете ответить «да» и рискнуть.
SSH имеет своего рода мини-PKI: после первого раза он запоминает отпечаток сервера, чтобы при повторном подключении к тому же серверу он мог проверить, тот же ли он, что и раньше .
Чтобы отфильтровать строки с разным количеством значений, разделенных запятыми, в 3-м и 4-м полях:
awk '{ nc3=split($3,a,","); nc4=split($4,a,",") } nc3 == nc4' data.in
Функция awk
split
разделит данное поле на регулярное выражение в его третьем аргументе (запятая в данном случае) и сохранит сгенерированные поля в массиве во втором аргументе (a
здесь). Мы не используем результирующий массив, а вместо этого используем тот факт, что split
также возвращает количество сгенерированных элементов массива.
Если эти числа (nc3
и nc4
) совпадают, строка будет напечатана.
попробуй
awk 'split($3,A,",") == split($4,B,",")'
согласно man awk
split(s, a [, r [, seps] ]) Split the string s into the array a and the separators array seps on the regular expression r, and return the number of fields.
Простойawkподход:
awk -F"[[:space:]]+|," '!(NF%2){ print }' file
Выход:
143 164 2,4 54,32
532 843 6,4,5 43,23,53
!(NF%2)
-рассмотрение только строк с четным числом элементов (обработка пробелов (s )и ,
в качестве разделителей полей)