The OpenNET Project / Index page

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

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

"awk запись в файл"  
Сообщение от KiN email on 30-Мрт-06, 23:19 
Помогите пожалуйста с одним вопросом.
Есть ли возможность/программа, позволяющая изменить значение определенного столбца в определенной строке текстового файла ?
Т.е. с помощью awk можно прочитать это значение, а вот чем его можно изменить/записать в файл ?
Спасибо.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

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


1. "awk запись в файл"  
Сообщение от allez (ok) on 31-Мрт-06, 06:52 
>Помогите пожалуйста с одним вопросом.
>Есть ли возможность/программа, позволяющая изменить значение определенного столбца в определенной строке текстового
>файла ?
>Т.е. с помощью awk можно прочитать это значение, а вот чем его
>можно изменить/записать в файл ?
>Спасибо.


Да с помощью того же awk:

Фрагмент исходного файла:
> cat /etc/fstab | grep swap
/dev/hda3 swap swap pri=44 0 0
/.swapfile swap swap pri=42 0 0

А теперь заменим во втором поле слово "swap" на "svop":
> cat /etc/fstab | grep swap | awk '{$2="svop"; print $0}'
/dev/hda3 svop swap pri=44 0 0
/.swapfile svop swap pri=42 0 0

Можно менять значение с проверкой условия:
> cat /etc/fstab | grep swap | awk '{if ($1 == "/.swapfile") $2="svop"; print $0}'
/dev/hda3 swap swap pri=44 0 0
/.swapfile svop swap pri=42 0 0

Ну, а чтобы внести изменения в исходный файл, необходимо перенаправить вывод awk во
временный файл, а затем заменить этим временным файлом исходный:
> cat fstab | grep swap | awk '{$2="svop"; print $0}' > tmpfile; mv tmpfile fstab

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "awk запись в файл"  
Сообщение от KiN email on 31-Мрт-06, 12:59 
>Ну, а чтобы внести изменения в исходный файл, необходимо перенаправить вывод awk
>во
>временный файл, а затем заменить этим временным файлом исходный:
>> cat fstab | grep swap | awk '{$2="svop"; print $0}' > tmpfile; mv tmpfile fstab

Вот в чем была моя ошибка - я тумал что эта команда запишет во временный файл ТОЛЬКО одну строку, а не весь файл.
Теперь вижу что я ошибался.
Спасибо еще раз!


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "awk запись в файл"  
Сообщение от BigShadow email on 31-Мрт-06, 15:53 
>> cat fstab | grep swap | awk '{$2="svop"; print $0}' > tmpfile; mv tmpfile fstab

кат и греп избыточен, можно ведь так:

awk '/swap/ {$2="svop"; print $0}' fstab > tmpfile; mv tmpfile fstab

плюс мона направлять вывод в файл из самого авк:

awk '/swap/ {$2="svop"; print $0 > "file"}' fstab

либо другой программе:

awk '/swap/ {$2="svop"; print $0 | "command"}' fstab

одним из средств поиска-замены явл. ф-ции gsub и sub

>Вот в чем была моя ошибка - я тумал что эта команда
>запишет во временный файл ТОЛЬКО одну строку, а не весь файл.

авк найдет, заменит и запишет все то, о чем вы его попросите :)))

RTFM http://ln.com.ua/~openxs/projects/man/uman024.html

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "awk запись в файл"  
Сообщение от allez (ok) on 01-Апр-06, 17:32 
>кат и греп избыточен, можно ведь так:
>
>awk '/swap/ {$2="svop"; print $0}' fstab > tmpfile; mv tmpfile fstab

Разумеется, можно :-).

Но, во-первых, я специально использовал grep для того, чтобы не перегружать awk лишними (в
данном конкретном случае) опциями. Учебный пример должен как можно полнее отражать
разбираемую задачу и снимать существующие вопросы, а не создавать новые ;-).

Во-вторых, мне лениво было создавать учебный файл, поэтому я решил использовать в примере
часть своего /etc/fstab, и grep мне представился вполне достойным выбором для отделения
этой части от целого.

Ну, а в-третьих, и, пожалуй, в-главных, я хотел бы, чтобы автор темы самостоятельно
подразобрался с остальными опциями awk, в качестве домашнего задания, так сказать :-).
А то он и без того ленив не в меру: вместо быстрого поиска в справочных материалах
предпочел забросить вопрос на форум и ждать ответа...

P.S. KiN, прошу вас не обижаться на мои слова, у меня и в мыслях нет нанести вам
оскорбление.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "awk запись в файл"  
Сообщение от KiN email on 03-Апр-06, 10:26 
>>кат и греп избыточен, можно ведь так:
>>
>>awk '/swap/ {$2="svop"; print $0}' fstab > tmpfile;
>
>Разумеется, можно :-).

Понимаете в чем проблема...
Я прежде чем писать в форум на самом деле искал решение и в книгах, и в инете.
НО, встречая строку подобного вида я думал так:
"awk обрабатывает файл построчно, следовательно, раз стоит знак ">" то в конечный файл будет записана только последняя строка."
Поэтому даже и не пробывал подобные решения.
А зря. :)


>P.S. KiN, прошу вас не обижаться на мои слова, у меня и
>в мыслях нет нанести вам
>оскорбление.

Да я же понимаю что Вы объясняли свое решение, а не критиковали мой вопрос.


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

6. "awk запись в файл"  
Сообщение от chip email(ok) on 03-Апр-06, 12:16 
>>> cat fstab | grep swap | awk '{$2="svop"; print $0}' > tmpfile; mv tmpfile fstab
>
>кат и греп избыточен, можно ведь так:
>
>awk '/swap/ {$2="svop"; print $0}' fstab > tmpfile; mv tmpfile fstab
>
>плюс мона направлять вывод в файл из самого авк:
>
>awk '/swap/ {$2="svop"; print $0 > "file"}' fstab
>
>либо другой программе:
>
>awk '/swap/ {$2="svop"; print $0 | "command"}' fstab
>
>одним из средств поиска-замены явл. ф-ции gsub и sub

В чём смысл всех этих изречений?! Учитывая то, что исходную задачу они _не выполняют_:
"...позволяющая ***изменить*** значение определенного столбца в определенной строке текстового файла"

chip@nebula:~$ awk '/swap/ {$2="svop"; print $0 }' /etc/fstab
/dev/hda3 svop swap sw 0 0
chip@nebula:~$

Адьёс!

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

7. "awk запись в файл"  
Сообщение от BigShadow email on 03-Апр-06, 13:02 
>>>> cat fstab | grep swap | awk '{$2="svop"; print $0}' > tmpfile; mv tmpfile fstab
>>кат и греп избыточен, можно ведь так:
>>awk '/swap/ {$2="svop"; print $0}' fstab > tmpfile; mv tmpfile fstab
>>плюс мона направлять вывод в файл из самого авк:
>>awk '/swap/ {$2="svop"; print $0 > "file"}' fstab
>>либо другой программе:
>>awk '/swap/ {$2="svop"; print $0 | "command"}' fstab
>>одним из средств поиска-замены явл. ф-ции gsub и sub
>
>В чём смысл всех этих изречений?! Учитывая то, что исходную задачу они
>_не выполняют_: "...позволяющая ***изменить*** значение определенного столбца
>в определенной строке текстового файла"

Эээ... вы точно нуждаетесь в ответе? ;)
Ну что ж. Ключевое слово во "всех этих изречениях" - ПЛЮС.
В ответ allezом был дан замечательный пример. ПЛЮС я привел дополнительную информацию.
Заметьте на тему "...с помощью awk можно прочитать это значение, а вот чем его можно изменить/записать в файл?", а не о полетах в космос. Вот и весь смысл. Что еще неясно?


Хотя если вернутца к оригинальным вопросам, то ответы должны быть совсем другими:

- Есть ли возможность/программа, позволяющая изменить значение определенного столбца в определенной строке текстового файла?
- Да такая возможность и программа существуют.

- Т.е. с помощью awk можно прочитать это значение, а вот чем его можно изменить/записать в файл?
- Это значение можно изменить и записать в файл при помощи того же awk.

P.S.
а вообще эту задачу реально выполнить средствами самого шелла без помощи авк :-Р

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

8. "awk запись в файл"  
Сообщение от chip email(ok) on 03-Апр-06, 16:17 
>>>>> cat fstab | grep swap | awk '{$2="svop"; print $0}' > tmpfile; mv tmpfile fstab
>>>кат и греп избыточен, можно ведь так:
>>>awk '/swap/ {$2="svop"; print $0}' fstab > tmpfile; mv tmpfile fstab
>>>плюс мона направлять вывод в файл из самого авк:
>>>awk '/swap/ {$2="svop"; print $0 > "file"}' fstab
>>>либо другой программе:
>>>awk '/swap/ {$2="svop"; print $0 | "command"}' fstab
>>>одним из средств поиска-замены явл. ф-ции gsub и sub
>>
>>В чём смысл всех этих изречений?! Учитывая то, что исходную задачу они
>>_не выполняют_: "...позволяющая ***изменить*** значение определенного столбца
>>в определенной строке текстового файла"
>
>Эээ... вы точно нуждаетесь в ответе? ;)

Мне ответ по большей части и не нужен. Это повод задуматься. К тому же на вопрос Вы всё равно не ответили.

.Адьёс.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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