Микрофон гарнитуры Ubuntu 16.04 не распознается

Это считывает все строки в a.txt и отслеживает все значения столбца 2. Затем он читает b.txt и печатает любые повторяющиеся значения столбца 2:

$ awk 'NR==FNR {seen[$2]=1; next} seen[$2]==1 {seen[$2]++; print $2}' a.txt b.txt
abcd
2dfg

Команда awk может быть разделена на две части. Первая часть:

NR==FNR {seen[$2]=1; next}

awk сначала проверяет, совпадает ли общее количество обработанных записей (строк), NR, с количеством записей, обрабатываемых в этом файле, . Это верно только для первого обработанного файла, который в этом случае является a.txt. Таким образом, для каждой строки из a.txt ассоциативный массив seen с ключом, установленным на значение второго столбца, $2, устанавливается в значение 1. Это будет использоваться для указания того, что это значение столбца-2 было «видно» в a.txt. Следующая команда: next, которая сообщает awk пропустить остальные команды и перейти к следующей записи.

Вторая часть:

seen[$2]==1 {seen[$2]++; print $2}

Из-за next в первой части выше, эта часть выполняется только файлом b.txt. Эта часть начинается с теста: он проверяет, было ли значение столбца-2, $2 для этой записи ранее. Если раньше было замечено, то выполняются команды в фигурных скобках. Первая команда в фигурных скобках seen[$2]++ увеличивает значение seen, так что мы больше не будем обрабатывать это значение столбца-2. (Следовательно, повторяющиеся значения столбца-2 игнорируются.) Вторая команда просто печатает значение столбца-2, которое было замечено ранее в a.txt.

Если мы можем верить, что повторений нет значения для столбца 2, возможен более простой сценарий:

$ awk '{print $2}' a.txt b.txt | sort | uniq -d
2dfg
abcd
1
задан 11 October 2016 в 03:56

0 ответов

Другие вопросы по тегам:

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