|
Программирование и разработка Обсуждение вопросов программирования |
|
Опции темы | Опции просмотра |
17.05.2007, 18:56 | #1 |
пришелец
|
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! |
17.05.2007, 19:03 | #2 |
Пешеход и человек
|
cat testfile |awk 'BEGIN {FS="\""}; {print $1, $2, $3}'
и все-таки man awk |
17.05.2007, 19:10 | #3 |
пришелец
|
А теперь представь себе, что строка немного другая:
поле1 "поле 2" "поле 3"
__________________
Use the Source, Luke! |
17.05.2007, 19:23 | #4 |
Пешеход и человек
|
это не "немного другая", это совсем другая.
а в следующий раз что будет, бинарный файл? |
17.05.2007, 19:29 | #5 |
пришелец
|
Нет. =) Бинарного не будет. Просто в файле строковые значения заключены в кавычки, а числовые без. Естественно, я привел упрощенный вариант формата, где только одно поле в кавычках, тогда все просто. А если не одно? Вот тут начинаются проблемы.
__________________
Use the Source, Luke! |
17.05.2007, 19:31 | #6 |
Пешеход и человек
|
ты лучше файл выложи, а то мало ли, чего там еще ты забыл
|
17.05.2007, 19:41 | #7 |
пришелец
|
Возвращаться на работу, чтоб выложить файл, мне как-то лениво. =)
Так что может верить на слово, строки файла аля: число число "какой-то текст" "еще какой-то текст" число число....
__________________
Use the Source, Luke! |
17.05.2007, 19:48 | #8 |
Пешеход и человек
|
ну я ж говорил у тебя все вперемешку идет, что ли? выше ты нарисовал так, как будто у тебя строго три поля в строке.
и что это у тебя за работа, на которую удаленно зайти нельзя? |
17.05.2007, 19:57 | #9 |
пришелец
|
Нет, не в перемешку. В определенном порядке. Числа над числами, строковые над строковыми, но чуЙствую, придется над $0 издеваться своими силами.
__________________
Use the Source, Luke! |
17.05.2007, 20:03 | #10 |
Пешеход и человек
|
так ты можешь хотя бы кусок реального файла показать? ну или сочинить, но чтобы он был таким же, как в реале. издеваться над $0 смысла нет, не для этого awk придуман.
|
Опции темы | |
Опции просмотра | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |