Извлечь список строк из файла, только из первого столбца

На экране ifconfig -aпоказаны все устройства, которые были распознаны и имеют соответствующие драйверы.

Обычный ifconfigпоказывает только включенные и настроенные устройства.

Ваш файл /etc/network/interfacesнастраивает только адаптер loи адаптер eth0. Вы не настраиваете другие устройства(eth1и т. д. )во время загрузки, поэтому, пока они там, ничто не подключило их к сети и не активировало. (если вы ничего не сделали в файле под /etc/network/interfaces.d?)

Предполагая, что в /etc/network/interfaces.dничего нет, вы можете настроить /etc/network/interfacesтак, чтобы -eth0 по-прежнему выполнял DHCP и предоставлял шлюз по умолчанию, другие устройства были в своих подсетях без связанного шлюза.

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
ifact eth1 inet static
   address 192.168.35.101
   netmask 255.255.255.0

auto eth2
ifact eth2 inet static
   address 192.168.1.33
   netmask 255.255.255.0

Обратите внимание, что вы можете сделать то же самое только с 1 сетевой картой и использовать виртуальные интерфейсы

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth0:1
ifact eth0:1 inet static
   address 192.168.35.101
   netmask 255.255.255.0

auto eth0:2
ifact eth0:2 inet static
   address 192.168.1.33
   netmask 255.255.255.0
0
10.09.2020, 13:42
3 ответа

Это должно сработать для вас

cat string.txt| while read -r str; do egrep "^$str *\|" masterFile.list;done
0
18.03.2021, 23:05

Вы можете использовать следующую awkпрограмму:

awk -F' *|' 'NR==FNR{searchstr[$1]=1} NR>FNR && ($1 in searchstr) {print}' string.txt masterFile.list

Как видите, вы предоставляете оба файла в качестве аргументов для awk.

  • Пока обрабатывается первый файл (, обозначенный FNR, счетчик на -строк файла -, равный NR, глобальный счетчик строк ), мы просто регистрируем весь поиск строки (номер поля. 1 каждой строки, поскольку они являются единственными элементами )в массиве searchstr(, однако в форме индекса массива , поэтому «значение» является просто фиктивным значением1).

  • Когда мы приходим к тому, что второй файл(NRтеперь больше, чем FNR), мы проверяем, содержится ли первый столбец($1)как индекс массива в searchstr. Если это так, мы печатаем всю строку.

Идея, стоящая за этим, заключается в том, что awkимеет удобный синтаксис string in array, который верен, если stringнаходится в списке индексов массива array.

Как заметил Эд Мортон, вы можете «вбить» это в

awk -F' *|' 'NR==FNR{searchstr[$1]; next} $1 in searchstr' string.txt masterFile.list

Вызов searchstr[$1]определит (, но не заполнит )эту запись массива, а$1 in searchstrза пределами блока правил будет -, если оценка будетtrue-инструктировать awkдля печати текущей строки. Инструкция nextв правиле обработки string.txtгарантирует, что эта часть будет достигнута только для masterFile.list

.

Обратите внимание, что я указал полное регулярное выражение ( *|, то есть любое количество пробелов, за которым следует|)в качестве разделителя полей, чтобы гарантировать, что «первое поле» masterFile.listдействительно является только числом -. ] указание -F'|'означало бы, что завершающий пробел также включен, и сделал бы процесс сопоставления более сложным. Если «пробелы» на самом деле также могут содержать TAB, используйте вместо этого -F'[[:space:]]*|'.

3
18.03.2021, 23:05

несколько вариантов, как указывали другие.

for i in $(cat string.txt); do grep -E "(^$i)" masterFile.txt; done
1
18.03.2021, 23:05

Теги

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