Skocz do zawartości

Bash Czy Da Rady?


kaspertk

Rekomendowane odpowiedzi

Witam.

mam taki problem i nie wiem jak go rozwiązać. A mianowicie mam dwa pliki w jednym będzie tekst

np. ala "" ma kota "" a kot ma "" ale

a w drugim wartości lub słowa oddzielone ;

np. dwa;01;34;ala

I właśnie czy w bashu jest możliwość napisania czegoś takiego aby wczytać pierwszy tekst i zamienić pierwszy znak "" na pierwszy wyraz/cyfrę z drugiego pliku a następnie drugi znak na drugi wyraz/znak z drugiego pliku aż do końca pliku.

Jeśli jest taka możliwość lub można to prościej zrealizować proszę o jakąś pomoc gdzie mogę coś na ten temat przeczytać aby rozwiązać ten problem, dodam że jestem zielony w tej dziedzinie.

Pozdrawiam.

 

Odnośnik do komentarza
Udostępnij na innych stronach

Da radę. Nie jestem fanem basha, dlatego nie napiszę Ci kodu (gdybym nawet znał dobrze basha to i tak tego bym nie zrobił), ale takie narzędzia jak awk, sed itp. bez problemu poradzą sobie z takim skryptem. Jak jesteś zielony to polecam dwa źródła wiedzy http://www.tldp.org/LDP/abs/html/ i http://www.gnu.org/software/bash/manual/bash.html . Po takiej lekturze machniesz od ręki taki skrypcik :)

Odnośnik do komentarza
Udostępnij na innych stronach

W dowolnym języku, załadować plik z podmienianymi danymi do tablicy, a na pliku wejściowym podmieniać dane przy użyciu wyrażeń regularnych. Całość zamknąć w przemyślanym algorytmie.

 

Propozycja w bash:

#!/bin/bash

# jakieś tam pliki z danymi
INPUT=/tmp/test_in.txt
SWITCH=/tmp/test_switch.txt
OUTPUT=/tmp/test_out.txt

cat >$INPUT<<__EOF__
ala "" ma kota "" a kot ma "" ale
__EOF__

cat >$SWITCH<<__EOF__
dwa;01;34;ala
__EOF__

# ------------------------------------------------------------------------------
set_tab(){
    # zmieniamy separator pól wejściowych na średnik
    local IFS=';'
    # ładujemy plik do tablicy
    TAB=( $(cat $SWITCH) )
}

set_tab

# pracujemy na kopii
cat $INPUT > $OUTPUT

# dla każdego elementu tablicy...
for p in ${TAB[@]}
do
    # podmień pierwszy napotkany tekst pasujący do wzorca
    # opcja "-i" wykonuje operację bezpośrednio na pliku
    sed -e 's/\"\"/'$p'/' $OUTPUT -i
done
# pokaż plik
cat $OUTPUT

na wyjściu dostaję:

ala dwa ma kota 01 a kot ma 34 ale

Nie podałeś zbyt wiele szczegółów. Gdybyś miał problemy, to opisz dokładniej przypadek. Bo teraz to nie wiem, czy starczy "słownika" na podmianę w tekście, czy słówek jest tyle samo. Dlatego pomyśl nad algorytmem i nie przepisuj bezmyślnie tego przykładu.

Drugi mankament to szybkość tego rozwiązania. Dla każdego słówka plik jest otwierany od nowa. Trzeba by pogłówkować nad sed lub awk dla optymalizacji, choć wątpię by Ci to było potrzebne.

Odnośnik do komentarza
Udostępnij na innych stronach

Przepraszam że tak długo się nie odzywałem;/ Dziś siadłem nad tym co napisaliście i czytam właśnie o bashu i testuje, jak będę miał jakieś pytania pozwolę sobie jeszcze zapytać (na pewno będzie dużo pytań). Wielkie dzięki za ten skrypt jak również za linki.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...