Добавление нового столбца в file1, который выводит строку в справочном файле file2, которая соответствует значению другого столбца в file1

Компьютер может иметь один или несколько IP-адресов.

Некоторым IP-протоколам, например ICMP, для связи нужны только IP-адреса. Другие, такие как UDP и TCP, требуют, чтобы пакеты адресовались как порту, так и IP-адресу. Обычно у вас есть программа, реализующая прослушивание службы на хорошо известном порте , чтобы другие системы знали, как с ней связаться. Сервер ssh , например, будет прослушивать порт 22 / tcp:

$ netstat -a -t
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:ssh                   *:*                     LISTEN     

$ netstat -a -t -n
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN   

Программа netstat будет давать символьные имена номерам портов, просматривая / etc / services , а такая программа, как sshd , будет вызывать getservbyname ("ssh", "tcp") для преобразования имени в номер порта.

Если вы слушаете IP-адрес 0.0.0.0 , это означает, что вы слушаете все IP-адреса системы, и поэтому netstat выводит * .

Сервер ssh не имеет для прослушивания порта 22. Вы можете изменить его файл конфигурации, например, чтобы прослушивать порт 8022. Пока удаленный пользователь знает номер порта и любые промежуточные межсетевые экраны разрешают трафик на порт 8022, он будет работать.

Для сотен служб по всему миру хорошо известные номера портов хранятся в Реестре имен портов и транспортных протоколов . Это надмножество / etc / services вашей локальной системы.

Сокет - это конечная точка связи. Прежде чем его можно будет использовать, он должен быть привязан к IP-адресу, номеру порта и протоколу.Если он использует TCP, он должен быть подключен к другому сокету, прежде чем можно будет обменяться пакетами. Сервер вызывает сокет , чтобы создать сокет, связывает , чтобы связать его, и слушает , чтобы прослушивать соединения. Клиент использует сокет и привязку , затем соединение для подключения к серверу. (Вызов bind не является обязательным для клиента; когда вызывается connect , система выделяет неиспользуемый порт и выбирает соответствующий IP-адрес для привязки к сокету.)

сокеты с TCP-портом 53 и UDP-портом 53 являются разными сокетами

Если услуга может быть предложена как для TCP, так и для UDP, обычно номера порта в обоих протоколах совпадают. В приведенном выше случае у вас, вероятно, будет один DNS-сервер, который создает два сокета, один прослушивает 0.0.0.0:53/tcp , а другой - 0.0.0.0:53/udp .

Некоторые старые службы были разработаны для работы только на одном протоколе, и в этих случаях вы можете увидеть две службы, использующие один и тот же номер порта (но, конечно, на разных протоколах). Например, 512 / tcp - для rexec, а 512 / udp - для biff. В таких системах совершенно разные программы прослушивают порты. rexecd слушает 512 / tcp, а comsat слушает 512 / udp.

1
03.05.2018, 01:38
1 ответ

Хотя вы заметили, что файлы разделены символами табуляции, на самом деле вы этим не воспользовались. Также общий ключ A, Bи т. д. находится в третьем поле в file2.txt. Так:

$ awk 'BEGIN{OFS=FS="\t"} NR==FNR{a[$1]=$2;next}{$4=a[$3];}1' file1.txt file2.txt
D01 Ti600   A   Golden fog
D02 Ti500   B   Vibrant rainbow and sunny
D16 Ti700   C   Jumping, bold, and bright
D20 Ti800   B   Vibrant rainbow and sunny

или (чуть короче)

$ awk -F'\t' 'NR==FNR{a[$1]=$2;next}{print $0"\t"a[$3]}' file1.txt file2.txt
D01 Ti600   A   Golden fog
D02 Ti500   B   Vibrant rainbow and sunny
D16 Ti700   C   Jumping, bold, and bright
D20 Ti800   B   Vibrant rainbow and sunny
1
28.01.2020, 00:36

Теги

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