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-09-04 18:12:17

  kubahaha - Nowy użytkownik

kubahaha
Nowy użytkownik
Zarejestrowany: 2012-09-04

Bash - wycięcie fragmentu pliku tekstowego

Witam. Moim celem jest odpowiednie przerobienie pliku tekstowego - chciałbym wyciąć z niego N pierwszych i K ostatnich linijek.
Przykładowo: Mam plik 1-in, który ma 5 linijek, w każdej jakieś dane. Chcę z niego wyprowadzić plik 1-out, który będzie miał ucięte 2 pierwsze i 2 ostatnie linijki. Próbowałem już robić to tworząc plik 1.bufor i porównując go z 1.in:

Kod:

head -q -n 2 1-in > 1-bufor
tail -q -n 2 1-in >> 1-bufor
diff 1-filter 1-in > 1-out

Nie do końca o to mi chodzi, ponieważ wydłuża to skrypt, a polecenie head wyrzuca na początku kilka znaków. Ma ktoś prostszą metodę?

Offline

 

#2  2012-09-04 19:17:44

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: Bash - wycięcie fragmentu pliku tekstowego

Po pierwsze: http://minio.jogger.pl/2009/11/21/popularne-bledy-p … n-przez-glowe

Rzecz w tym, że liczba linii w pliku może być zmienna, zaś awk nie ma sposobu na określenie, ile wierszy znajduje się w pliku. Masz więc dwie możliwości:
1. dwukrotnie odczytać plik w samym awk (pierwszy raz po to, aby poznać liczbę linii, od której odejmiesz K i tę liczbę przekażesz drugiemu przebiegowi);
2. najpierw odczytać liczbę linii przy pomocy wc a potem tę liczbę (lub liczbę zmniejszoną o K — zależy gdzie chcesz dokonywać operacji arytmetycznych, w powłoce czy w awk) przekazać do awk. Potrzebny Ci tutaj będzie przełącznik -v.

Offline

 

#3  2012-09-04 22:37:18

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Bash - wycięcie fragmentu pliku tekstowego

Minio napisał(-a):

przekazać do awk. Potrzebny Ci tutaj będzie przełącznik -v.

Lub do seda.


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#4  2012-09-25 21:33:57

  prosze - Użytkownik

prosze
Użytkownik
Zarejestrowany: 2012-09-25

Re: Bash - wycięcie fragmentu pliku tekstowego

Możesz to zrobić w bardzo prosty sposób (drukuje 2 pierwsze i 2 ostatnie linie pliku):

Kod:

awk '{if(NR<3)print}{ y=x "\n" $0; x=$0 } END { print y }' staryplik > nowyplik

Offline

 

#5  2012-09-26 11:29:40

  djjanek - Użytkownik

djjanek
Użytkownik
Skąd: whereis
Zarejestrowany: 2007-11-15
Serwis

Re: Bash - wycięcie fragmentu pliku tekstowego

Od START- wiersza do końca pliku:

Kod:

sed -n ${START}',$p' ${PLIK} > ${WYJSCIE}

Od START do STOP

Kod:

sed -n ${START},${STOP} ${PLIK} > ${WYJSCIE}

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)