Strona 1 z 1

[bash][solved]Usuwanie pierwszej lini pliku

: 18 mar 2010, 18:28
autor: Niewpisze
Pisze skrypt który po każdym obrocie pętli wycina pierwszą linię pliku(nazwijmy go jeden)
przenosi go do pliku dwa a w pliku jeden tą linię usuwa. Może ktoś mi powiedzieć jak to zrobić? Jakich komend użyć? Wiem że przyda się head i cat ale co dalej nie wiem

Odp: [bash]Usuwanie pierwszej lini pliku

: 18 mar 2010, 22:41
autor: beluosus
Wygląda na to, że chcesz odwrócić kolejność linijek w pliku. Rozwiązać to można np tak:

Kod: Zaznacz cały

tac plik > odwróconyPlik

Odp: [bash]Usuwanie pierwszej lini pliku

: 18 mar 2010, 22:52
autor: Niewpisze
beluosus Niestety nie o to chodzi ale dzięki:)
Może faktycznie trochę nie jasno się wyraziłem

Kod: Zaznacz cały

#!/bin/bash

if [ $# -eq 0 ]; then
NAZWA="dosciagniecia"
else
NAZWA=$1
fi

#liczba=`wc -l "$NAZWA" | sed -e "s/[ \ta-z.][ \ta-z.]*//g"`

#echo "$liczba"


while [ `wc -l $NAZWA | sed -e "s/[ \ta-z.][ \ta-z.]*//g"`  -ne 0 ] ;  do


PLIK=`head -1 $NAZWA`

echo "$PLIK"

#qoobster $PLIK

echo $PLIK >> sciagniete

tr "[$PLIK]" "[]" < $NAZWA

done
Chodzi o to że robię "nakładkę" skrypt qoobster. Qoobster pobiera jeden link z pliku i pobiera z rapidshare. Chodzi mi o to żeby po pobraniu przez qoobster linku ten link kasował się z pliku wsadowego (ktory będzie podany wraz z wywołaniem skryptu) i wpisywał się do pliku sciagniete

Odp: [bash]Usuwanie pierwszej lini pliku

: 18 mar 2010, 22:57
autor: thalcave

Kod: Zaznacz cały

sed '1d' plik
usuwa pierwszy wiersz pliku plik i wyświetla na ekranie

Odp: [bash]Usuwanie pierwszej lini pliku

: 18 mar 2010, 23:40
autor: Niewpisze

Kod: Zaznacz cały

#!/bin/bash



if [ $# -eq 0 ]; then
NAZWA="dosciagniecia"
else
NAZWA=$1
fi




while [ `wc -l $NAZWA | sed -e "s/[ \ta-z.][ \ta-z.]*//g"`  -gt 1 ];
do



liczba=`wc -l $NAZWA | sed -e "s/[ \ta-z.][ \ta-z.]*//g"`
echo "$liczba"



PLIK=`head -1 $NAZWA`

echo "
$PLIK
"

#qoobster $PLIK

echo $PLIK >> sciagniete

POZOSTALE=`sed '1d' $NAZWA`

echo $POZOSTALE >> $NAZWA


done
Może mi ktoś pomóc wyeliminować błędy?
Czemu jak przenoszę dane do pliku znaki zmiany lini się kasują?

Odp: [bash]Usuwanie pierwszej lini pliku

: 18 mar 2010, 23:50
autor: beluosus

Kod: Zaznacz cały

POZOSTALE=`sed '1d' $NAZWA`

echo $POZOSTALE >> $NAZWA
Zrób jakoś tak:

Kod: Zaznacz cały

sed '1d' $NAZWA >> $NAZWA
Niewpisze pisze:Czemu jak przenoszę dane do pliku znaki zmiany lini się kasują?
Ponieważ wszystkie białe znaki dla bash'a są separatorami.

Odp: [bash]Usuwanie pierwszej lini pliku

: 19 mar 2010, 00:06
autor: Niewpisze
Teraz cuda się dzieją bo w pliku wejściowym zamiast liczba linii maleć to rośnie.

Odp: [bash]Usuwanie pierwszej lini pliku

: 19 mar 2010, 00:57
autor: dawidgarus
musisz użyć pliku tymczasowego:

Kod: Zaznacz cały

sed '1d' $NAZWA > tymczasowy
mv tymczasowy $NAZWA

Odp: [bash]Usuwanie pierwszej lini pliku

: 19 mar 2010, 11:37
autor: beluosus
Niewpisze pisze:Teraz cuda się dzieją bo w pliku wejściowym zamiast liczba linii maleć to rośnie.
Tak właśnie myślałem, dlatego podwójnie mnie zdziwił Twój kod.

Kod: Zaznacz cały

sed -i '1d' $NAZWA

Odp: [bash][solved]Usuwanie pierwszej lini pliku

: 19 mar 2010, 21:19
autor: Niewpisze
Dzięki wielkie działa :)