Проверить, содержит ли один список строки, содержащиеся в другом списке

Используйте команду ss -s, чтобы получить подробный ответ.

0
03.02.2020, 09:46
2 ответа
awk 'ARGIND == 1 { a[NR]=$1;     next }
     $0 ~ a[FNR] { print "true"; next }
                 { print "false"      }' ex1 ex2

В Awk я предпочитаю писать программы в более «условной {действии}» структуре. Это очень аналогично решению @AdminBee.

  • ARGIND ==1-если это первый аргумент :сохранить первое слово
  • $0 ~ a[FNR]-если эта строка($0)содержит сохраненное гомологическое слово «истина»; иначе "ложь"
0
28.04.2021, 23:24

Предполагая, что в ваших строках в file1.txtнет пробелов, должен работать следующий подход, основанный наawk-:

awk 'NR==FNR{patterns[FNR]=$1} FNR<NR{if (index($0,patterns[FNR])>0) print "true"; else print "false"}' file1.txt file2.txt

Для вашего примера это даст

true
true
true
true
true
false

Некоторое объяснение. :Мы используем awkдля чтения обоих файлов, но обрабатываем их по-разному.

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

  • Хотя обработкаfile2.txt(FNRтеперь меньше, чем NR), мы используем функцию indexдля поиска строки patterns[FNR]во всей строке ввода ($0). Если это так, index()вернет начальную позицию больше 0, и мы напечатаем true, иначе мы напечатаем false.

1
28.04.2021, 23:24

Теги

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