Проблема с awk

Я сталкиваюсь с проблемой при попытке заменить первую строку текстового файла с помощью команды awk в Unix.

Я использую этот синтаксис:

awk '{ (FS=OFS=""); if($19=="2") sub($88,"4");print $0 }' input.txt>output.txt

this команда не редактирует первую строку текстового файла. в чем причина этого?

0
задан 30 April 2017 в 06:20

3 ответа

Трудно понять, что вы пытаетесь сделать без примера вашего ввода и ожидаемого вывода (в частности, sub($88,"4") выглядит сомнительным - первый аргумент sub должен быть регулярным выражением).

Однако, если вы хотите, чтобы пустая FS была применена к первой записи (строке) вашего ввода, вам нужно установить ее . Трудно понять, что вы пытаетесь сделать, без примера ваш вход и ожидаемый результат (в частности, sub($88,"4") выглядят сомнительными - первый аргумент sub должен быть регулярным выражением). первая запись анализируется - с использованием правила BEGIN. Например, сравните

$ printf '123\n456\n' | awk '{FS=OFS=""; print $2}'

5

с

$ printf '123\n456\n' | awk 'BEGIN{FS=OFS=""} {print $2}'
2
5
0
ответ дан 22 May 2018 в 23:05

Трудно понять, что вы пытаетесь сделать без примера вашего ввода и ожидаемого вывода (в частности, sub($88,"4") выглядит сомнительным - первый аргумент sub должен быть регулярным выражением).

Однако, если вы хотите, чтобы пустая FS была применена к первой записи (строке) вашего ввода, вам нужно установить ее . Трудно понять, что вы пытаетесь сделать, без примера ваш вход и ожидаемый результат (в частности, sub($88,"4") выглядят сомнительными - первый аргумент sub должен быть регулярным выражением). первая запись анализируется - с использованием правила BEGIN. Например, сравните

$ printf '123\n456\n' | awk '{FS=OFS=""; print $2}' 5

с

$ printf '123\n456\n' | awk 'BEGIN{FS=OFS=""} {print $2}' 2 5
0
ответ дан 18 July 2018 в 14:03

Трудно понять, что вы пытаетесь сделать без примера вашего ввода и ожидаемого вывода (в частности, sub($88,"4") выглядит сомнительным - первый аргумент sub должен быть регулярным выражением).

Однако, если вы хотите, чтобы пустая FS была применена к первой записи (строке) вашего ввода, вам нужно установить ее . Трудно понять, что вы пытаетесь сделать, без примера ваш вход и ожидаемый результат (в частности, sub($88,"4") выглядят сомнительными - первый аргумент sub должен быть регулярным выражением). первая запись анализируется - с использованием правила BEGIN. Например, сравните

$ printf '123\n456\n' | awk '{FS=OFS=""; print $2}' 5

с

$ printf '123\n456\n' | awk 'BEGIN{FS=OFS=""} {print $2}' 2 5
0
ответ дан 24 July 2018 в 20:19

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

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