получить в качестве вывода только непарный список

В настоящее время нет поддерживаемого способа сделать это с помощью SLE 12. С SLE 15 sp 1 вы можете установить последнюю бета-версию SUSE CaaS Platform 4, которая использует Kubeadm.

Существует также платформа OpenSUSE kubernetes под названием OpenSUSE Kubic, основанная на OpenSUSE Tumbleweed.

0
25.08.2021, 08:36
2 ответа

grep -v будет работать, просто поменяйте местами источник и цель. -будет использовать трубу для-f
вместо этого -xвся строка -wцелое слово рекомендуется игнорировать пробелы из all.txt

cut -d\  -f1 active.txt | grep -vxFf - all.txt

Обратите внимание на два пробела для вырезания :один экранированный пробел в качестве разделителя

отредактируйте :если разделитель является двоеточием, то вместо него нужно обрезать :

cut -d: -f1 active.txt | grep -vwFf - all.txt
1
25.08.2021, 10:46

Вы можете сделать это с помощью awk. Проблема в этом случае заключается в том, что в active.txtза портами сразу следует :, тогда как в all.txtони остаются изолированными на линии. Поэтому вам нужно изменить разделитель полей между:

awk -F':' 'FS==":"{ports[$1];next} !($1 in ports)' active.txt FS=" " all.txt

Это будет использовать :в качестве разделителя полей при чтении списка активных портов (, т. е. при обработке первого файла active.txt), но установит его на пробел для обработки следующего файла, all.txt.

  • При обработке active.txt(, обозначенного FS, разделителем полей, равным :, установленному с помощью опции -F), мы просто регистрируем порты (, т.е. часть перед первый:)в массиве ports. Затем выполнение немедленно переходит к следующей строке ввода.
  • При обработкеall.txt(FSтеперь пробел, поэтому первый блок действий никогда не вводится ), мы просто проверяем, зарегистрирован ли порт в массиве ports. Если это не так, условие оценивается как true, и будет вызвано действие по умолчанию print.
1
26.08.2021, 11:33

Теги

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