Форум Gatchina OnLine  

Вернуться   Форум Gatchina OnLine > Hard&Soft > Программирование и разработка

Программирование и разработка Обсуждение вопросов программирования

Ответ
 
Опции темы Опции просмотра
Старый 17.05.2007, 18:56   #1
ΛLIEN
пришелец
 
Аватар для ΛLIEN
 
Регистрация: 23.01.2006
Адрес: Земля, 013 в центуре

Нарушения:[Посмотреть]
AWK (shell, Linux)

Вопрос такой возник по awk-у, может есть простые решения.

Есть файл формата:
поле1 "поле 2" поле3
поле1 "поле 2" поле3
.... и т.д.

Естественно, строковое поле "поле 3" разбивается на два. В итоге имеем
$1 = поле1
$2 = "поле
$3 = 2"
$4 = поле3

А хотелось бы:
$1 = поле1
$2 = "поле 2"
$3 = поле3

Заниматься тем, что самому парсить $0 и вытаскивать отдельно значения в кавычках не улыбает, тем более, что пробел между кавычек может быть не один (или вообще табулятор). Есть ли более простые решения при помощи изменения, к примеру, FS или как-то еще?

ps: к man awk не отсылать. Не нашел я там ничего по этому поводу. =)

pps: интересуют решения только для awk.
__________________
Use the Source, Luke!
ΛLIEN вне форума   Ответить с цитированием
Старый 17.05.2007, 19:03   #2
Прохожий
Пешеход и человек
 
Аватар для Прохожий
 
Регистрация: 23.01.2006

Нарушения:[Посмотреть]
cat testfile |awk 'BEGIN {FS="\""}; {print $1, $2, $3}'

и все-таки man awk
Прохожий вне форума   Ответить с цитированием
Старый 17.05.2007, 19:10   #3
ΛLIEN
пришелец
 
Аватар для ΛLIEN
 
Регистрация: 23.01.2006
Адрес: Земля, 013 в центуре

Нарушения:[Посмотреть]
Цитата:
Сообщение от Прохожий Посмотреть сообщение
cat testfile |awk 'BEGIN {FS="\""}; {print $1, $2, $3}'
А теперь представь себе, что строка немного другая:

поле1 "поле 2" "поле 3"
__________________
Use the Source, Luke!
ΛLIEN вне форума   Ответить с цитированием
Старый 17.05.2007, 19:23   #4
Прохожий
Пешеход и человек
 
Аватар для Прохожий
 
Регистрация: 23.01.2006

Нарушения:[Посмотреть]
это не "немного другая", это совсем другая.
а в следующий раз что будет, бинарный файл?
Прохожий вне форума   Ответить с цитированием
Старый 17.05.2007, 19:29   #5
ΛLIEN
пришелец
 
Аватар для ΛLIEN
 
Регистрация: 23.01.2006
Адрес: Земля, 013 в центуре

Нарушения:[Посмотреть]
Цитата:
Сообщение от Прохожий Посмотреть сообщение
это не "немного другая", это совсем другая.
а в следующий раз что будет, бинарный файл?
Нет. =) Бинарного не будет. Просто в файле строковые значения заключены в кавычки, а числовые без. Естественно, я привел упрощенный вариант формата, где только одно поле в кавычках, тогда все просто. А если не одно? Вот тут начинаются проблемы.
__________________
Use the Source, Luke!
ΛLIEN вне форума   Ответить с цитированием
Старый 17.05.2007, 19:31   #6
Прохожий
Пешеход и человек
 
Аватар для Прохожий
 
Регистрация: 23.01.2006

Нарушения:[Посмотреть]
ты лучше файл выложи, а то мало ли, чего там еще ты забыл
Прохожий вне форума   Ответить с цитированием
Старый 17.05.2007, 19:41   #7
ΛLIEN
пришелец
 
Аватар для ΛLIEN
 
Регистрация: 23.01.2006
Адрес: Земля, 013 в центуре

Нарушения:[Посмотреть]
Цитата:
Сообщение от Прохожий Посмотреть сообщение
ты лучше файл выложи, а то мало ли, чего там еще ты забыл
Возвращаться на работу, чтоб выложить файл, мне как-то лениво. =)
Так что может верить на слово, строки файла аля:

число число "какой-то текст" "еще какой-то текст" число число....
__________________
Use the Source, Luke!
ΛLIEN вне форума   Ответить с цитированием
Старый 17.05.2007, 19:48   #8
Прохожий
Пешеход и человек
 
Аватар для Прохожий
 
Регистрация: 23.01.2006

Нарушения:[Посмотреть]
ну я ж говорил у тебя все вперемешку идет, что ли? выше ты нарисовал так, как будто у тебя строго три поля в строке.

и что это у тебя за работа, на которую удаленно зайти нельзя?
Прохожий вне форума   Ответить с цитированием
Старый 17.05.2007, 19:57   #9
ΛLIEN
пришелец
 
Аватар для ΛLIEN
 
Регистрация: 23.01.2006
Адрес: Земля, 013 в центуре

Нарушения:[Посмотреть]
Цитата:
Сообщение от Прохожий Посмотреть сообщение
ну я ж говорил у тебя все вперемешку идет, что ли? выше ты нарисовал так, как будто у тебя строго три поля в строке.
Нет, не в перемешку. В определенном порядке. Числа над числами, строковые над строковыми, но чуЙствую, придется над $0 издеваться своими силами.
__________________
Use the Source, Luke!
ΛLIEN вне форума   Ответить с цитированием
Старый 17.05.2007, 20:03   #10
Прохожий
Пешеход и человек
 
Аватар для Прохожий
 
Регистрация: 23.01.2006

Нарушения:[Посмотреть]
так ты можешь хотя бы кусок реального файла показать? ну или сочинить, но чтобы он был таким же, как в реале. издеваться над $0 смысла нет, не для этого awk придуман.
Прохожий вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Linux stz Операционные системы 443 22.08.2018 11:58
Открытый лекторий по Linux в Петербурге M@GIC Операционные системы 4 20.03.2007 23:17
LINUX Suse v.10 Din-ngo Операционные системы 6 14.03.2006 00:34


Текущее время: 13:45. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot