Добавить поле в текущую запись перед обработкой в ​​awk - PullRequest
0 голосов
/ 01 марта 2020

Я хочу использовать большой сценарий awk, который был разработан для получения определенного ввода. Например, «городской почтовый индекс, уличный номер», так что $ 2 - это почтовый индекс, и т. Д. c ...

Теперь ввод предоставляется мне в новом формате. В моем примере «город» сейчас отсутствует. Новый файл - "почтовый индекс" (не по-настоящему, просто пытаюсь сделать пример простым), но я случайно узнал, что город является константой для этого ввода (поэтому его нет в наборе данных). Так что, если я прогоню его по оригинальному сценарию, $ 2 теперь станет улицей, и все будет одним полем.

Я мог бы сначала обработать входной файл, добавив название города к каждой строке (используя awk, sed или что-то еще), затем запустить его через оригинальный скрипт, но я бы предпочел запустить только один скрипт, который поддерживает оба формата. Я мог бы добавить параметр командной строки, который сообщает город, но я не знаю, как вставить его перед текущей записью в верхней части скрипта, чтобы остальная часть скрипта могла быть неизменной. Похоже, я могу изменить поле, но я хочу «сдвинуть» поля правильно, чтобы я мог изменить $ 1.

Я уже говорил, что я новичок в awk? (Perl мой яд.)

Ответы [ 2 ]

0 голосов
/ 01 марта 2020

Что-то в строках этого должно сделать это. Первые пропущенные тестовые данные:

$ cat file
1 2 3 4
2 3 4

The awk:

$ awk -v c=V '{      # define external var
    if(NF==3)        # if record has only three fields
        $0=v FS $0   # prepend the var to the record
    print $1         # print first field 
}' file

Вывод:

1
V
0 голосов
/ 01 марта 2020

Я думаю, что исправил свою собственную проблему, я делаю следующее (не выяснил, как сделать это условно на основе параметра командной строки, но для этого должно быть легко найти учебники)

NF+=1;
for(i=NF; i>1; --i) $(i)=$(i-1);
$1="Vancouver";

В моем комментарии выше я ошибся в l oop, но основная идея c манипулирования NF и копирования полей друг в друга, похоже, работает

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