View previous topic :: View next topic |
Author |
Message |
Alpin19 Tux's lil' helper
Joined: 12 Nov 2005 Posts: 83 Location: Warszawa
|
Posted: Wed Jan 25, 2006 6:58 am Post subject: [OT] Wycięcie z pliku danych od wiersza XX do wiersza YY |
|
|
Witam
Mam taki problem.
"grepuje" pliki w katalogu poszukiwanego ciągu znaków poleceniem:
Code: | grep 'ciąg znaków' FILE_* -l |
W ten sposób znajduję plik w którym znajduje się ten ciąg znaków.
Teraz potrzebuję wyciąć z tego pliku jedynie 10 wierszy, zaczynając od wiersza w którym znajduje się ów ciąg znaków.
Czyli naprzykład:
Szukam ciągu znaków "faktura 5523", polecenie znajduje sie w pliku "przykład.txt" i znajduje się w wierszu 48 od góry, więc wycinam z pliku tylko wiersze 48 do 58 !
Jak to zrobić ? _________________ ...jak to dobrze że adminem AS/400 jest kolega
Jabber: alpin19[at]chrome.pl
http://lipnicki.waw.pl |
|
Back to top |
|
|
blazeu Apprentice
Joined: 02 Feb 2005 Posts: 159 Location: Cracow, Poland
|
Posted: Wed Jan 25, 2006 7:16 am Post subject: |
|
|
Code: | grep 'ciąg znaków' FILE_* -l -A liczba_linii_do_wyciecia |
Nie wiem czy o to chodzi, ale jezeli tak, to potem mozesz to przeslac do innego pliku przez >> albo > . _________________ Przeczytanie manuala: 5-10minut
Zadanie kolejnego bzdurnego pytania na forum: 0.5 minuty
Status idioty wsrod forumowiczow: bezcenny
Tako rzecze ja: kapral rezerwy |
|
Back to top |
|
|
_troll_ Bodhisattva
Joined: 04 Feb 2004 Posts: 1971 Location: Warszawa, Poland
|
Posted: Wed Jan 25, 2006 10:44 am Post subject: |
|
|
Code: | sed -n -e 'X,Y p' plik.txt | jesli nic nie pomylilem
mozesz tez badac zawartosc sed'em
Pozdrawiam,
Przemek _________________ Życie jest jak pudełko czekoladek....
Nigdy nie wiesz na co trafisz" by mother of Forrest Gump |
|
Back to top |
|
|
Alpin19 Tux's lil' helper
Joined: 12 Nov 2005 Posts: 83 Location: Warszawa
|
Posted: Wed Jan 25, 2006 3:10 pm Post subject: |
|
|
Rozwiązałem to w następujący sposób (dla potomnych ):
Code: |
# Tworze pliki niezbedne do dzialania
# skryptu:
if [ -e /home/karol/temp.txt ]; then
rm /home/karol/temp.txt;
touch /home/karol/temp.txt;
fi
touch /home/karol/temp_2.txt;
fvatdir="/home/AS400/arc_negoce/version_2/";
echo -n "Podaj nr faktury: ";
read fvat;
echo "Wyszukujesz fakture nr: $fvat";
echo -n "Podaj adres email: ";
read fvatmail;
echo "Faktura zostanie wysłana na adres email: $fvatmail";
cd $fvatdir;
fname=`grep $fvat INSFA05010* -l`;
echo "Faktura o numerze $fvat znajduje sie w pliku: $fname";
#------------------------------------------
# Zliczam ilość wierszy w pliku źródłowym
wiersze=`wc -l $fname | awk '{print $1}'`;
echo "Plik liczy $wiersze linii";
#------------------------------------------
# Określam miejsce w którym zaczyna sie faktura
faktura=`grep -n "FAKTURA VAT $fvat" $fname | awk '{print $1}' | sed s/:$//g`;
echo "Faktura Nr $fvat zaczyna sie w wierszu: $faktura";
#------------------------------------------
# Obliczam od którego wiersza wycina
addline=$(( $faktura - 1));
echo $addline;
cut_from=$(( $wiersze - $addline ));
echo "Faktura zostanie przycięta od wiersza: $cut_from";
#------------------------------------------
# Przesyłam dane do pliku tymczasowego
tail -n $cut_from $fname > /home/karol/temp.txt;
nwfl=`wc -l /home/karol/temp.txt | awk '{print $1}'`;
echo "Nowy plik liczy $nwfl wierszy";
#------------------------------------------
# Obliczam wiersz na ktorym faktura sie konczy
sec_fvat=`grep -n "FAKTURA VAT" /home/karol/temp.txt | head -n 2 | tail -n 1 | awk '{print $1}' | sed s/:$//g`;
sec_fvat2=$(( $sec_fvat - 1));
echo "Faktura zostanie przycięta w wierszu: $sec_fvat2";
#------------------------------------------
# Wycinanie:
head -$sec_fvat2 /home/karol/temp.txt > /home/karol/temp_2.txt
echo "Plik przycięto";
#------------------------------------------
# Przygotowuje plik do wysłania
mv -f /home/karol/temp_2.txt /home/karol/faktura_$fvat.txt
if [ -e /home/karol/faktura_$fvat.txt ]; then
mail -s "Faktura $fvat" $fvatmail < /home/karol/faktura_$fvat.txt;
echo "Mail został wysłany pomyślnie !";
fi
exit; |
_________________ ...jak to dobrze że adminem AS/400 jest kolega
Jabber: alpin19[at]chrome.pl
http://lipnicki.waw.pl |
|
Back to top |
|
|
psycepa Veteran
Joined: 27 Dec 2004 Posts: 1637 Location: Poland
|
Posted: Fri Jan 27, 2006 12:59 am Post subject: |
|
|
[SOLVED] ??:> _________________ RLUNo. 376073
bo czytac, to trzeba ze zrozumieniem (c) by psycepa
"nigdy nie kloc sie z glupcem, najpierw sprowadzi cie do swojego poziomu a potem pokona doswiadczeniem"
"Life is complex. It has its real and imaginary part." |
|
Back to top |
|
|
Alpin19 Tux's lil' helper
Joined: 12 Nov 2005 Posts: 83 Location: Warszawa
|
Posted: Fri Jan 27, 2006 1:08 pm Post subject: |
|
|
Sądzisz że wątek powinien być zaklasyfikowany jako [solved] ? _________________ ...jak to dobrze że adminem AS/400 jest kolega
Jabber: alpin19[at]chrome.pl
http://lipnicki.waw.pl |
|
Back to top |
|
|
psycepa Veteran
Joined: 27 Dec 2004 Posts: 1637 Location: Poland
|
Posted: Fri Jan 27, 2006 1:51 pm Post subject: |
|
|
Alpin19 wrote: | Rozwiązałem to w następujący sposób (dla potomnych ):
|
hmm wydawalo mi sie zo znaczy ze rozwiazales swoj problem, no chyba ze jest inaczej, wtedy zwracam honor... _________________ RLUNo. 376073
bo czytac, to trzeba ze zrozumieniem (c) by psycepa
"nigdy nie kloc sie z glupcem, najpierw sprowadzi cie do swojego poziomu a potem pokona doswiadczeniem"
"Life is complex. It has its real and imaginary part." |
|
Back to top |
|
|
Alpin19 Tux's lil' helper
Joined: 12 Nov 2005 Posts: 83 Location: Warszawa
|
Posted: Fri Jan 27, 2006 8:28 pm Post subject: |
|
|
ehhh psycepa.... Praca nad skryptem dopiero się zaczyna
Teraz muszę stworzyć na tej podstawie coś co będzie wyszukiwało wg sześciu kryteriów (pobieranych z zawartości pliku), więc możesz mi spokojnie życzyć powodzenia _________________ ...jak to dobrze że adminem AS/400 jest kolega
Jabber: alpin19[at]chrome.pl
http://lipnicki.waw.pl |
|
Back to top |
|
|
qermit Veteran
Joined: 02 Feb 2005 Posts: 1032
|
Posted: Fri Jan 27, 2006 9:03 pm Post subject: |
|
|
takie rzeczy w pythonie piszę
wycinanie 10 lini z pliku (parametr 1) od lini w której znajduje się tekst (parametr 2)
Code: |
from sys import argv
linia = -1
dane = open(argv[1]).readlines()
for i in range(len(dane)):
if argv[2] in dane[i]:
linia=i
break
dane2=dane[linia:+10]
for i in dane2:
print i,
|
dlaczego w pytonie?
- bo ma ładną składnie
- bo ma mnóstwo rozszeżeń (podobnie jak inne języki skryptowe)
PS pisałem z pamięci _________________ "A co ty masz w swoim LinuXie?" - Dr Qermit |
|
Back to top |
|
|
Alpin19 Tux's lil' helper
Joined: 12 Nov 2005 Posts: 83 Location: Warszawa
|
Posted: Fri Jan 27, 2006 9:35 pm Post subject: |
|
|
Z kolei znajomy polecił mi pisanie tego w Perl'u _________________ ...jak to dobrze że adminem AS/400 jest kolega
Jabber: alpin19[at]chrome.pl
http://lipnicki.waw.pl |
|
Back to top |
|
|
Aktyn l33t
Joined: 25 Dec 2005 Posts: 619
|
Posted: Fri Jan 27, 2006 9:42 pm Post subject: |
|
|
Alpin19 wrote: | Z kolei znajomy polecił mi pisanie tego w Perl'u |
Każdy poleca to na tym czym sie zna, ja nie znam sie na żadnym języku poza C, no i troche asm dla niektórych mikrokontrolerów.
Mało bystry pod tym względem jestem :/
w shellu, czy to bash czy ssh czy jakis inny, tylko troche sie orientuje. _________________ Aktyn Pages
są ludzie inteligentni, są nad wyraz inteligentni i błyskotliwi, są jasnowidze, są wszechwiedzący bogowie, oraz ludzie piszący kompilatory |
|
Back to top |
|
|
|