powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Нужна помощь в написании шелл-скрипта
8 сообщений из 8, страница 1 из 1
Нужна помощь в написании шелл-скрипта
    #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
Нужна помощь в написании шелл-скрипта
    #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
Нужна помощь в написании шелл-скрипта
    #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
Нужна помощь в написании шелл-скрипта
    #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
Нужна помощь в написании шелл-скрипта
    #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
Нужна помощь в написании шелл-скрипта
    #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
Нужна помощь в написании шелл-скрипта
    #36639233
ananas2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неправильный пример, имелось ввиду вот так:
Код: plaintext
 22  |bla-bla |start of the text             end of the text           | bla-bla
...
Рейтинг: 0 / 0
Нужна помощь в написании шелл-скрипта
    #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
8 сообщений из 8, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Нужна помощь в написании шелл-скрипта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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