Nowe posty

Autor Wątek: bash, posortowanie zawartosci w pliku  (Przeczytany 2676 razy)

patrykxes

  • Gość
bash, posortowanie zawartosci w pliku
« dnia: 2008-12-09, 12:45:08 »
Witam

w pliku mam taki uklad:
[fraza:/]
@fraza1 = rw
@fraza2 = r
@fraza3 = r
@fraza4 = r

[fraza:/public/trunk]
@fraza5 = r
@fraza1 = r
@fraza6 = r
@fraza7 = r
@fraza2 = r
@fraza8 = r
@fraza9 = r
...
a chcialbym miec taki jak ponizej:
[fraza:/],rw,@fraza1
[fraza:/],r,@fraza2
[fraza:/],r,@fraza3
[fraza:/],r,@fraza4
[fraza:/public/info],r,@fraza5
[fraza:/public/info],r,@fraza1
[fraza:/public/info],r,@fraza6
[fraza:/public/info],r,@fraza7
[fraza:/public/info],r,@fraza2
[fraza:/public/info],r,@fraza8
[fraza:/public/info],r,@fraza9
...

Kombinuje z awk, ale nie uklada mi odpowiednio.

--
Pozdrawiam

brograf

  • Gość
bash, posortowanie zawartosci w pliku
« Odpowiedź #1 dnia: 2008-12-09, 19:41:37 »
Przypuszczam, że AWK to już za mało...

1) Możesz sztucznie podzielić plik na części i potem go obrabiać.
2) W awk były zmienne, to co jest w [] przechowujesz w niej i wyświetlasz na początku wiersza.
3) Jeżeli jesteś hardcorowiec to możesz użyć LEXa, np. http://viable.pl/tutorial/108/preview/.

Powodzenia :)

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
bash, posortowanie zawartosci w pliku
« Odpowiedź #2 dnia: 2008-12-10, 09:38:07 »
Mam nadzieję, że to nie praca domowa :)

Dlaczego w pierwszym pliku jest [fraza:/public/trunk] a w drugim [fraza:/public/info]?

Taki kod powinien wystarczyć:
#!/bin/bash

INFILE="in.txt"
OUTFILE="out.txt"

headerregexp="^\\[.*\\]$"
frazaregexp="^@.*$"

cat /dev/null > "$OUTFILE"
header=""
while read linia; do
  if [[ "$linia" =~ $headerregexp ]]; then
    header="$linia"
  fi
  if [[ "$linia" =~ $frazaregexp ]]; then
    fraza=`echo "$linia" | awk "{ print \\\\$1 }"`
       rw=`echo "$linia" | awk "{ print \\\\$3 }"`
    echo "${header},${rw},${fraza}" >> "$OUTFILE"
  fi
done < "$INFILE"