The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Редактирование с помощью awk"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Редактирование с помощью awk"  +/
Сообщение от salvani (ok) on 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) то в файле остается только часть строк. Как мне выполнить условие и сохранить замены в файле, не удалив при этом остальные строки?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Редактирование с помощью awk"  +/
Сообщение от Andrey Mitrofanov on 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}'

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Редактирование с помощью awk"  +/
Сообщение от Andrey Mitrofanov on 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, но куда это писать?

Туда же...

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "Редактирование с помощью awk"  +/
Сообщение от salvani (ok) on 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" в одинарных
> кавычках.

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

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру