Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Нужна помощь в написании шелл-скрипта / 8 сообщений из 8, страница 1 из 1
19.05.2010, 00:16
    #36635248
ananas2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в написании шелл-скрипта
Добрый день!

Есть файлы, такого вида: cat file1

21 |bla-bla |full text |bla-bla
31 |bla-bla |full text |bla-bla
11 |bla-bla |full text |bla-bla
22 |bla-bla |start of the text |bla-bla
| |end of the text |
26 |bla-bla |start of the text |bla-bla
| |end of the text |
28 |bla-bla |full text | bla-bla

Нужно привести их к такому:
21 |bla-bla |full text |bla-bla
31 |bla-bla |full text |bla-bla
11 |bla-bla |full text |bla-bla
22 |bla-bla |start of the text end of the text |bla-bla
26 |bla-bla |start of the text end of the text |bla-bla
28 |bla-bla |full text | bla-bla

Короче нужно повырезать из строк начинающихся с пустого поля куски из единственной непустой колонки и вставить в предыдущую строку в соответствующую колонку..

Подскажите, как можно это реализовать, а то я что-то не могу понять с какой стороны проще подступится. То ли на awk все как-то написать, то ли разложить по строкам и ячейкам через for + while. В общем пока я тупике.


Заранее пасиба!
...
Рейтинг: 0 / 0
19.05.2010, 13:59
    #36636529
Alexey181
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в написании шелл-скрипта
ananas2,

а так не нельзя
Код: plaintext
1.
2.
3.
4.
5.
6.
cat file1 | grep -v "||" | sed 's/the text/the text end of the text/g'
 21  |bla-bla |full text |bla-bla
 31  |bla-bla |full text |bla-bla
 11  |bla-bla |full text |bla-bla
 22  |bla-bla |start of the text end of the text |bla-bla
 26  |bla-bla |start of the text end of the text |bla-bla
 28  |bla-bla |full text | bla-bla
...
Рейтинг: 0 / 0
19.05.2010, 14:31
    #36636675
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в написании шелл-скрипта
Вот так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
$ cat test.txt
 21  |bla-bla |full text |bla-bla
 31  |bla-bla |full text |bla-bla
 11  |bla-bla |full text |bla-bla
 22  |bla-bla |start of the text |bla-bla
| |end of the text |
 26  |bla-bla |start of the text |bla-bla
| |end of the text |
 28  |bla-bla |full text | bla-bla


$ nawk -f test.awk test.txt
 21  |bla-bla |full text |bla-bla
 31  |bla-bla |full text |bla-bla
 11  |bla-bla |full text |bla-bla
 22  |bla-bla |start of the text end of the text |bla-bla
 26  |bla-bla |start of the text end of the text |bla-bla
 28  |bla-bla |full text | bla-bla

$
...
Рейтинг: 0 / 0
19.05.2010, 14:32
    #36636682
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в написании шелл-скрипта
Если вдруг паче чаяния угадал, то
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
$ cat test.awk
BEGIN {FS="|";OFS=FS}
$ 1 !~/^\s*$/ { if (A[ 1 ] != "") print A[ 1 ],A[ 2 ],A[ 3 ],A[ 4 ] ; split($ 0 ,A,"|"); next}
$ 1 ~/^\s*$/ {A[ 3 ]=A[ 3 ] $ 3 }
END { if (A[ 1 ] != "") print A[ 1 ],A[ 2 ],A[ 3 ],A[ 4 ]}

$
...
Рейтинг: 0 / 0
19.05.2010, 18:46
    #36637557
ananas2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в написании шелл-скрипта
andrey_anonymousЕсли вдруг паче чаяния угадал, то
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
$ cat test.awk
BEGIN {FS="|";OFS=FS}
$ 1 !~/^\s*$/ { if (A[ 1 ] != "") print A[ 1 ],A[ 2 ],A[ 3 ],A[ 4 ] ; split($ 0 ,A,"|"); next}
$ 1 ~/^\s*$/ {A[ 3 ]=A[ 3 ] $ 3 }
END { if (A[ 1 ] != "") print A[ 1 ],A[ 2 ],A[ 3 ],A[ 4 ]}

$


Огромное спасибо за готовое решение!
...
Рейтинг: 0 / 0
20.05.2010, 14:57
    #36639219
ananas2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в написании шелл-скрипта
Еще вопрос, а какая в awk есть функция для убирания лишних пробелов? А то у меня после
strart of the text и end of the text пробелов много и когда сливаются получается что-то вроде

22 |bla-bla |start of the text end of the text | bla-bla
...
Рейтинг: 0 / 0
20.05.2010, 15:01
    #36639233
ananas2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в написании шелл-скрипта
Неправильный пример, имелось ввиду вот так:
Код: plaintext
 22  |bla-bla |start of the text             end of the text           | bla-bla
...
Рейтинг: 0 / 0
20.05.2010, 17:52
    #36639893
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в написании шелл-скрипта
Пора уже набрать
Код: plaintext
$man awk
и почитать.
Код: plaintext
1.
2.
3.
4.
5.
BEGIN {FS="|";OFS=FS}
 {sub(/[ ]+$/,"",$ 3 ); sub(/^[ ]+/,"",$ 3 )}
$ 1 !~/^\s*$/ { if (A[ 1 ] != "") print A[ 1 ],A[ 2 ],A[ 3 ],A[ 4 ] ; split($ 0 ,A,"|"); next}
$ 1 ~/^\s*$/ {if($ 3  !="")A[ 3 ]=A[ 3 ] " " $ 3 }
END { if (A[ 1 ] != "") print A[ 1 ],A[ 2 ],A[ 3 ],A[ 4 ]}
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Нужна помощь в написании шелл-скрипта / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]