Выбор ответа Senior grep, sed, awk, find, xargs обновлено

NR и FNR в awk

Вопрос

Что делает awk 'NR == FNR { seen[$1]; next } $1 in seen' a.txt b.txt?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Печатает строки b.txt, чей ключ есть в a.txt. NR считает строки по всем файлам, FNR внутри текущего файла.

Варианты ответа

  1. Печатает строки a.txt, ключей которых нет в b.txt
  2. Склеивает файлы построчно, как paste a.txt b.txt
  3. Печатает строки b.txt, чей ключ есть в a.txtправильный ответ
  4. Печатает строки обоих файлов без повторов

Разбор

NR считает строки по всем файлам, FNR внутри текущего файла. Условие NR == FNR истинно только для первого файла: запоминаем ключи и next пропускает остальное. Для второго файла срабатывает $1 in seen, то есть это «JOIN» по ключу. Разность дало бы !($1 in seen), построчную склейку делает paste, уникальность sort -u.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.