Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2012-07-19 18:24:38

  debian_user - Nowy użytkownik

debian_user
Nowy użytkownik
Zarejestrowany: 2012-07-19

[bash] przeniesienie linii poprzedzonych \t do poprzedniej linii

Witam szanownych forumowiczów. Mam następujący problem: chcę w pliku tekstowym przenieść wszystkie linie poprzedzone tabulatorem na koniec linii poprzedzającej, tak aby wszystkie wystąpienia typu:

aaaaaa
     bbb
     ccc

zamienić na jedną linię:

aaaaaabbbccc.

Czy da się tego dokonać programem typu sed czy tr bądź innym podobnym? Zależy mi by zrobić to w stylu

Kod:

cat input.txt | magiczny_program -parametry ...

Mogę oczywiście np w pętli wczytywać linię do zmiennej, kolejną linię do innej zmiennej i sprawdzać czy występuje tabulator, jeśli tak to doklejać zawartość linii następnej do poprzedzającej ale jest to raczej mało elegancki sposób, chciałbym to zrealizować jakoś sprytniej, macie jakieś pomysły?

Offline

 

#2  2012-09-25 21:40:03

  prosze - Użytkownik

prosze
Użytkownik
Zarejestrowany: 2012-09-25

Re: [bash] przeniesienie linii poprzedzonych \t do poprzedniej linii

Mamy pomysły tylko pokaż cały plik i napisz co mamy przenieść.

Offline

 

#3  2012-09-25 23:10:35

  winnetou - złodziej wirków ]:->

winnetou
złodziej wirków ]:->
Skąd: Jasło/Rzeszów kiedyś Gdańs
Zarejestrowany: 2008-03-31
Serwis

Re: [bash] przeniesienie linii poprzedzonych \t do poprzedniej linii

taki łamaniec od niechcenia

Kod:

winnetou@wigwam /tmp $ cat X
aaa
    bb
    ccc
ddd
        eee
winnetou@wigwam /tmp $ sed -e 's/\t//g' X |while read L;do echo -n $L;done;echo
aaabbcccdddeee

Oczywiście rozwiązanie nieoptymalne ale działa :P


LRU: #472938
napisz do mnie: ola@mojmail.eu
Hołmpejdż | Galerie | "Twórczość" || Free Image Hosting

Offline

 

#4  2012-09-26 12:38:31

  prosze - Użytkownik

prosze
Użytkownik
Zarejestrowany: 2012-09-25

Re: [bash] przeniesienie linii poprzedzonych \t do poprzedniej linii

Inne propozycje rozwiązania:

Kod:

awk 'ORS=""; $1=$1; END { print "\n"}' plik

Kod:

awk '$1=$1{printf"%s",$0} END {print ""}' plik

Kod:

awk '{for(i=1; i<=NF; i++) printf "%s", $i} END {print ""}' plik

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)