The OpenNET Project / Index page

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

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

"Объединение строк bash"  +/
Сообщение от AnnaBokova (ok) on 31-Авг-12, 17:18 
Доброго времени суток!

Есть текстовый файл вида:

+ 123
456
789 -
+ 234
567
890 -

Нужно объединить все строки между + и -, и получить в результате:
+ 123 456 789 -
+ 234 567 890 -

Как это можно сделать? начала изучать sed, но что-то не могу никак тут его применить.


Ответить | Правка | Cообщить модератору

Оглавление

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


1. "Объединение строк bash"  –1 +/
Сообщение от XAnder (ok) on 31-Авг-12, 19:35 
> Как это можно сделать? начала изучать sed, но что-то не могу никак
> тут его применить.

sed принципиален? Если нет, то всё просто, но нудно:

$ cat file.txt | perl -ne 'chomp; if(/^\+/) {$s=$_} elsif(/-$/) {print "$s $_\n"; $s=""} elsif($s) {$s.=" $_"} else {print "$_\n"}'

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Объединение строк bash"  +2 +/
Сообщение от ДорогойДрук on 01-Сен-12, 00:28 
>> Как это можно сделать? начала изучать sed, но что-то не могу никак
>> тут его применить.
> sed принципиален? Если нет, то всё просто, но нудно:
>
$ cat file.txt | perl -ne 'chomp; if(/^\+/) {$s=$_} elsif(/-$/) {print "$s 
> $_\n"; $s=""} elsif($s) {$s.=" $_"} else {print "$_\n"}'

ООО да, пёрл здесь очень кстати :)

cat file.txt | tr -d "\n" | sed s/-/-"\n"/g
Вам не кажется, что так будет несколько проще?

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Объединение строк bash"  +/
Сообщение от anonymous (??) on 01-Сен-12, 13:53 
>> Как это можно сделать? начала изучать sed, но что-то не могу никак
>> тут его применить.
> sed принципиален? Если нет, то всё просто, но нудно:
>
$ cat file.txt | perl -ne 'chomp; if(/^\+/) {$s=$_} elsif(/-$/) {print "$s 
> $_\n"; $s=""} elsif($s) {$s.=" $_"} else {print "$_\n"}'

Perl принципиален? Если нет, то:


#!/usr/bin/expect --
log_user 0
spawn bash
set outfile {}
expect "\\$" {exp_send -- "cat file.txt\n"}
expect {
    "\\$" {}
    -re "\n(\\+.*-)+?" {lappend outfile $expect_out(1,string); exp_continue}
}
set outfile [string map {\r "" \n " "} $outfile]
foreach list $outfile {puts stdout $list}

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Объединение строк bash"  +2 +/
Сообщение от allez (ok) on 01-Сен-12, 15:53 

$ cat file
+ 123
456
789 -
+ 234
567
890 -

$ cat file | tr "\n" " " | sed 's/- /-\n/g'
+ 123 456 789 -
+ 234 567 890 -

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Объединение строк bash"  +1 +/
Сообщение от михалыч (ok) on 01-Сен-12, 19:04 
чисто "чистый" sed ))
sed -e :a -e '/[0-9]$/N; s/\n/ /; ta' file

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Объединение строк bash"  +/
Сообщение от михалыч (ok) on 02-Сен-12, 06:57 
sed -e :a -e '/[-]$/\!N; s/\n/ /; ta' file
короче, хотел "короче" ))
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Объединение строк bash"  +1 +/
Сообщение от Andrey Mitrofanov on 02-Сен-12, 13:10 
>
sed -e :a -e '/[-]$/\!N; s/\n/ /; ta' file
короче, хотел "короче" ))

Во-первых, "[-]$" -> "-$".

А во-вторых, по поводу "s/\n/": работа с символами перевода строки в _sed-е это такой _страшный тёмный лес (vs версии*реализации), что лучше бы и не начинать... (Жду одобрения от посикс-активистов!).

В-третьих, про короче: -e -e не нужен, "\!" не едет! sed ':a /-$/!N;s/\n/ /;ta'

В-четвёртых, я б предпочёл написать ':a /-$/!{N;s/\n/ /g;ba}'

В-пятых, проверив с не "-"-данными перед "+", добавил бы ':a /^\+/{/-$/!{N;s/\n/ /;ba}}' ...

...но это уж точно ником не нуд^Hжно.%)

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Объединение строк bash"  +/
Сообщение от Andrey Mitrofanov on 02-Сен-12, 13:20 
> лучше бы и не начинать... (Жду одобрения от посикс-активистов!).

Хотя, часть активистов больше возбудится от

sed ':a /-$/!{N;s/\
/ /;ba}'

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

10. "Объединение строк bash"  +/
Сообщение от anonymous (??) on 07-Сен-12, 09:10 
>> лучше бы и не начинать... (Жду одобрения от посикс-активистов!).
> Хотя, часть активистов больше возбудится от
> sed ':a /-$/!{N;s/\
> / /;ba}'

Мы тут старались-старались, а от топикстартера даже спасибо не дождешься! ;)

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

11. "Объединение строк bash"  +/
Сообщение от richit (ok) on 11-Окт-12, 17:49 
>> лучше бы и не начинать... (Жду одобрения от посикс-активистов!).
> Хотя, часть активистов больше возбудится от
> sed ':a /-$/!{N;s/\
> / /;ba}'

посоветуйте что почитать надо, чтобы понять, что здесь написано ;)

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

13. "Объединение строк bash"  +/
Сообщение от Andrey Mitrofanov on 12-Окт-12, 11:40 
>> sed ':a /-$/!{N;s/\
>> / /;ba}'
> посоветуйте что почитать надо, чтобы понять, что здесь написано ;)

Чтобы _понять, нужно _работать головой, а не читать (в широком/простом смысле~).
Ну, man sed почитай, прикладывая прочитанное к выше написанному.

3 подхода по 10. Каждый день. ...До наступления понимания. Но я ничего не гарантировал.

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

14. "Объединение строк bash"  +/
Сообщение от pavlinux (ok) on 24-Окт-12, 02:19 
>> Хотя, часть активистов больше возбудится от
>> sed ':a /-$/!{N;s/\/ /;ba}'
> посоветуйте что почитать надо, чтобы понять, что здесь написано ;)

http://www.regular-expressions.info/

Mastering Regular Expressions  http://shop.oreilly.com/product/9780596528126.do
Introducing Regular Expressions http://shop.oreilly.com/product/0636920012337.do
Regular Expressions Cookbook http://shop.oreilly.com/product/0636920023630.do

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

9. "Объединение строк bash"  +/
Сообщение от allez (ok) on 02-Сен-12, 14:51 
> А во-вторых, по поводу "s/\n/": работа с символами перевода строки в _sed-е
> это такой _страшный тёмный лес (vs версии*реализации), что лучше бы и
> не начинать... (Жду одобрения от посикс-активистов!).

Воистину акбар! :-)

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

12. "Объединение строк bash"  +/
Сообщение от Anonim (??) on 11-Окт-12, 22:26 
> Как это можно сделать? начала изучать sed, но что-то не могу никак
> тут его применить.

Признайся, ты - бородатый админ, ради лулзов прикидывающийся лицом женского пола :)

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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