Awk: замена значений в столбце на основе входных данных из другого файла - PullRequest
1 голос
/ 23 марта 2012

Я использовал вкладыш awk one из этого вопроса, чтобы решить мою похожую проблему. Однако, не зная Awk, я понятия не имею, как это работает. Кто-нибудь может объяснить, как работает скрипт? Я хотел бы понять это, чтобы я мог применять его в разных ситуациях.

Ниже приведен один вкладыш из ссылки:

awk 'FNR==NR{a[NR]=$3;next}{$2=a[FNR]}1' f2 f1

Я знаю, что FNR=NR это часть, которая гарантирует, что строки в файле 1 соответствуют одному и тому же номеру строки в файле 2. И, очевидно, $ 3 и $ 2 соответствуют третьему и второму полям соответственно. Но я озадачен тем, что делает «1» в конце кода, и меня немного смущает «а». Я предполагаю, что это представляет имена файлов.

1 Ответ

2 голосов
/ 23 марта 2012

awk будет обрабатывать каждый файл по очереди построчно. Awk будет отслеживать текущий номер строки в текущем файле (переменная FNR), а также общее количество просмотренных строк (переменная NR). Условие FNR==NR может быть истинным, только когда awk читает первый файл.

a[NR]=$3 устанавливает элемент массива, индексированный по NR, для хранения значения третьего поля.

Программа awk в основном состоит из condition {action} пар. Для текущей строки проверяется каждое условие, и если оно истинно, выполняется блок действия. Если условие отсутствует, будет выполнен блок действия - это относится к блоку {$2=a[FNR]}. Если условие присутствует, но блок действия отсутствует, действие по умолчанию - вывести $ 0, который является текущей строкой после любых преобразований. Поскольку ненулевое число эквивалентно true, 1 указывает awk выполнить действие по умолчанию для каждой строки.

Причина, по которой первый файл не распечатан, связана с инструкцией next в первом блоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...