Strona 1 z 1

Usuwanie konkretnych numerów linii z pliku (w pętli)

: 08 sie 2010, 21:58
autor: helleluyah
Witam,

Chcę stworzyć taką pętlę:

Kod: Zaznacz cały

#!/bin/bash


count=`wc -l h6.txt | sed 's/h6.txt//g'`
number="1"	

while [ $number -le $count ]	
do
sed -i "`sed "$number"'q;d' h6.txt`"d testowy.txt

number=$[number+1]
	
done
gdzie h6.txt to plik, w którym linijka pod linijką są wypisane numery lini które mają być usunięte z pliku testowy.txt. Plik h6.txt ma 27 linii. Po wykonaniu skryptu okazuje się, że usunęło tylko 22 linie a nie 27. Czym może być to spowodowane? Nie mam już pomysłu, jak rozwiązać ten problem. Proszę o pomoc.

Pozdrawiam.

Odp: Usuwanie konkretnych numerów linii z pliku (w pętli)

: 09 sie 2010, 10:23
autor: leon1313
Rekordy w pliku h6.txt masz posortowane od największego do najmniejszego?

Odp: Usuwanie konkretnych numerów linii z pliku (w pętli)

: 09 sie 2010, 14:13
autor: beluosus
Albo posortuj rekordy w pliku h6.txt tak jak proponuje leon1313 albo usuwaj elementy od końca. Pamiętaj, że jak usuwasz pierwszą linię, to ta która była druga teraz zajmuje miejsce pierwszej - częsty błąd.

Odp: Usuwanie konkretnych numerów linii z pliku (w pętli)

: 09 sie 2010, 17:19
autor: helleluyah
Próbowałem zrobić tak:

Kod: Zaznacz cały

#!/bin/bash


count=`wc -l h5.txt | sed 's/h5.txt//g'`
number="1"	

while [ $number -le $count ]	
do
sed -e "s/`sed $number\"q;d\" h5.txt`/ /g" testowy.txt

number=$[number+1]
	
done
h5.txt to plik, w którym są wypisane w linie (jako treść), które są do usunięcia z pliki testowy.txt. Jednak skrypt zwraca taki oto błąd:

Kod: Zaznacz cały

sed: -e wyrażenie #1, znak 10: nieznana opcja dla polecenia `s'
Oczywiście linii błędu jest tyle, ile linii jest w pliku h5.txt. Co robię źle?

Odp: Usuwanie konkretnych numerów linii z pliku (w pętli)

: 09 sie 2010, 22:52
autor: dk75

Kod: Zaznacz cały

#!/bin/bash
awk 'BEGIN{getline var0 < "/tmp/h5.txt"} {if (NR!=var0) {print} else getline var0 < "/tmp/h5.txt"}' /tmp/testowy.txt

Odp: Usuwanie konkretnych numerów linii z pliku (w pętli)

: 10 sie 2010, 11:59
autor: borzole
tak na marginesie:

Kod: Zaznacz cały

$ wc -l ~/.bashrc
4 /home/lucas/.bashrc
ale

Kod: Zaznacz cały

$ wc -l < ~/.bashrc
4