URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9910
[ Назад ]

Исходное сообщение
"Редактирование с помощью awk"

Отправлено salvani , 03-Окт-14 15:21 
Здравствуйте.
Помогите, пожалуйста, разобраться с awk.

Есть csv файл вида
"KZ 53203401373";"5320_3401373";"Шайба";"K-Z";
"OS 2721_02B";"2721_02B";"Автолампа";"OSRAM";
"OS 2722";"2722";"Автолампа";"OSRAM";

Задача следующая - если текст в четвертом столбце равен "OSRAM", то во втором столбце символы "_" следует заменить на "-".

Пишу такую команду
$ awk -F ";" ' $4 == "\"OSRAM\"" {sub("_", "-", $2); print} ' file.csv
команда отрабатывает правильно, заменяет требуемые символы в нужных строках и выводит эти строки. Проблема в том, что строки, которые не подпали под условие $4 == "\"OSRAM\"" не выводятся, т.е. если я перенаправляю вывод в файл (print > FILENAME) то в файле остается только часть строк. Как мне выполнить условие и сохранить замены в файле, не удалив при этом остальные строки?


Содержание

Сообщения в этом обсуждении
"Редактирование с помощью awk"
Отправлено Andrey Mitrofanov , 03-Окт-14 15:24 
> Пишу такую команду
> $ awk -F ";" ' $4 == "\"OSRAM\"" {sub("_", "-", $2); print}'

0' $4 == "\"OSRAM\"" {sub("_", "-", $2); print}'
1' {if($4 == "\"OSRAM\"")sub("_", "-", $2); print}'
2' $4 == "\"OSRAM\"" {sub("_", "-", $2)} {print}'

> строки. Проблема в том, что строки, которые не подпали под условие


"Редактирование с помощью awk"
Отправлено salvani , 03-Окт-14 15:35 
> 0' $4 == "\"OSRAM\"" {sub("_", "-", $2); print}'
> 1' {if($4 == "\"OSRAM\"")sub("_", "-", $2); print}'
> 2' $4 == "\"OSRAM\"" {sub("_", "-", $2)} {print}'

Андрей, спасибо за быстрый ответ.
Вы уж простите нуба, сегодня только начал разбираться с awk, но куда это писать?


"Редактирование с помощью awk"
Отправлено pavel_simple , 03-Окт-14 15:45 
>> 0' $4 == "\"OSRAM\"" {sub("_", "-", $2); print}'
>> 1' {if($4 == "\"OSRAM\"")sub("_", "-", $2); print}'
>> 2' $4 == "\"OSRAM\"" {sub("_", "-", $2)} {print}'
> Андрей, спасибо за быстрый ответ.
> Вы уж простите нуба, сегодня только начал разбираться с awk, но куда
> это писать?

это что-то новенькое


"Редактирование с помощью awk"
Отправлено Andrey Mitrofanov , 03-Окт-14 16:00 
>> 0' $4 == "\"OSRAM\"" {sub("_", "-", $2); print}'
>> 1' {if($4 == "\"OSRAM\"")sub("_", "-", $2); print}'
>> 2' $4 == "\"OSRAM\"" {sub("_", "-", $2)} {print}'

^---Это 3 варианта той части твоей команды, которая за "awk" в одинарных кавычках.
Цифры в начале строки _не часть кода. #0 - твой вариант, ##1 и 2 - варианты его изменения.

> Вы уж простите нуба, сегодня только начал разбираться с awk, но куда это писать?

Туда же...


"Редактирование с помощью awk"
Отправлено salvani , 03-Окт-14 16:09 
>>> 0' $4 == "\"OSRAM\"" {sub("_", "-", $2); print}'
>>> 1' {if($4 == "\"OSRAM\"")sub("_", "-", $2); print}'
>>> 2' $4 == "\"OSRAM\"" {sub("_", "-", $2)} {print}'
> ^---Это 3 варианта той части твоей команды, которая за "awk" в одинарных
> кавычках.

Спасибо, все работает))