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

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
helleluyah
Piegowaty Guziec
Piegowaty Guziec
Posty: 6
Rejestracja: 19 wrz 2009, 13:51
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

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

Post 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.
Awatar użytkownika
leon1313
Zakręcona Traszka
Zakręcona Traszka
Posty: 668
Rejestracja: 02 sty 2006, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: KDE Plasma
Architektura: x86

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

Post autor: leon1313 »

Rekordy w pliku h6.txt masz posortowane od największego do najmniejszego?
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

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

Post 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.
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
helleluyah
Piegowaty Guziec
Piegowaty Guziec
Posty: 6
Rejestracja: 19 wrz 2009, 13:51
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

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

Post 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?
Awatar użytkownika
dk75
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1142
Rejestracja: 07 mar 2007, 22:59
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

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

Post 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
Linux Mint Debian Edition x86_64/2.6.39, Conky 1.8.0, Xorg 7.6/1.10.4 - GNOME 2.30.2, nVidia 285.03
Lenovo T61p, HITACHI HTS722010K9SA00 100GB, ST9250827AS 250GB
http://linuxcounter.net/user/483055.html
Awatar użytkownika
borzole
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 127
Rejestracja: 10 sie 2010, 11:48
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

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

Post 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
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość