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
)содержит сохраненное гомологическое слово «истина»; иначе "ложь" Предполагая, что в ваших строках в 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
.