Portál AbcLinuxu, 10. května 2025 08:09

Dotaz: Vymazání prvních deseti řádků ze souboru

Pavel V. avatar 16.11.2006 08:54 Pavel V. | skóre: 22 | Pardubice
Vymazání prvních deseti řádků ze souboru
Přečteno: 248×
Odpovědět | Admin
Dobré "ranko",
nevím jak řešit tento problém. Mám soubor u kterého potřebuji automaticky odstraňovat prvních deset řádku, ale s podmínkou že název souboru zůstane zachován.
Chtěl jsem použít příkazu:
sed '1,10d' /mnt/hda1/uptime.txt > /mnt/hda1/uptime.txt
ale nový soubor je prázdný. Netušíte jak to udělat aby obsah byl stejný pouze bez oněch deseti řádků?
Předem díky.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.11.2006 09:02 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Prv než sa spustí sed, tak shell, z ktorého ho spúšťaš, vyrobí/oreže súbor, do ktorého robíš presmerovanie.

Buď použiješ iné meno, ktoré potom premenuješ naspäť, alebo budeš vytvárať výsledný súbor v inom adresári, alebo nepoužiješ presmerovanie (ale napr. ed)
Pavel V. avatar 16.11.2006 09:17 Pavel V. | skóre: 22 | Pardubice
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru
Myslel jsem i na tohle:
sed '1,10d' /mnt/hda1/uptime.txt > /mnt/hda1/uptime1.txt
rm /mnt/hda1/uptime.txt
mv /mnt/hda1/uptime1.txt /mnt/hda1/uptime.txt
ale to se mi zda moc amaterske ;-).
16.11.2006 11:54 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru
to nie je amatérske. Btw, to rm netreba.
Pavel V. avatar 16.11.2006 10:49 Pavel V. | skóre: 22 | Pardubice
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru
Tady je výsledný skript, který vytváří soubor s max. 20 uptime časy a následně jej posílá na ftp.
#!/bin/bash

uptime >> /mnt/hda1/uptime.txt
vystup_wc=`wc -l /mnt/hda1/uptime.txt`
radky=${vystup_wc%% *}
if [ $radky -gt 20 ]
then
echo "$(sed '1,1d' /mnt/hda1/uptime.txt)" > /mnt/hda1/uptime.txt
lftp ftp_server -u login,"heslo" -e "put /mnt/hda1/uptime.txt; exit;"
else
lftpftp_server -u login,"heslo" -e "put /mnt/hda1/uptime.txt; exit;"
fi
exit

#programy potrebne pro spusteni skriptu: uptime, wc, sed, lftp.
16.11.2006 12:20 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru
Co takhle raději využít programu uprecords?
-- Nezdar není hanbou, hanbou je strach z pokusu.
16.11.2006 13:17 Pavel1 | skóre: 33
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru
Jestli jsem skript dobře pochopil, trochu bych ho upravil (třeba odesílání je tam zbytečně 2x). Snad jsem se nikde nesekl ...
#!/bin/bash
File=/mnt/hda1/uptime.txt
uptime >> $File
echo "$(tail -n 20 $File)" > $File
lftp ftp_server -u login,"heslo" -e "put $File; exit;"
Pavel V. avatar 16.11.2006 14:18 Pavel V. | skóre: 22 | Pardubice
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru
Pěknej.
16.11.2006 14:45 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru
Ach jo, v čem je to lepší než když se použije program uprecords, který dává například takovýto výstup?
# uprecords 
     #               Uptime | System                                    Boot up 
----------------------------+-------------------------------------------------
     1   311 days, 00:52:21 | Linux 2.6.11.9-grsec     Sat Aug 13 13:03:11 2005
->   2   149 days, 01:48:10 | Linux 2.6.11.9-grsec-2   Tue Jun 20 13:55:52 2006
     3     0 days, 00:07:59 | Linux 2.6.11.9-grsec     Sat Aug 13 12:49:09 2005
----------------------------+-------------------------------------------------
no1 in   161 days, 23:04:12 | at                       Fri Apr 27 14:48:09 2007
-- Nezdar není hanbou, hanbou je strach z pokusu.
16.11.2006 14:46 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru
nebo nejde o uptime, ale o zátěž systému? Pak bych raději použil výstup programu sar.
-- Nezdar není hanbou, hanbou je strach z pokusu.
16.11.2006 16:03 Pavel1 | skóre: 33
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru
Třeba v tom, že uprecords nemá (nezná). Alespoň já. Já určitě zkusím doinstalit. Dík za typ.
16.11.2006 09:32 Pavel1 | skóre: 33
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tady máš jedno řešení, ale netvrdím, že je nejleší ...
echo "$(sed '1,10d' /mnt/hda1/uptime.txt)" > /mnt/hda1/uptime.txt
Pavel V. avatar 16.11.2006 09:48 Pavel V. | skóre: 22 | Pardubice
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru
Super díky.
16.11.2006 11:07 Sandžůró
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru - sed -i
Odpovědět | | Sbalit | Link | Blokovat | Admin

K tomu slouží parametr -i u novějších verzí sedu. Takže je otázka, jak moc má být ten skript přenositelný.

sed -i '1,10d' /mnt/hda1/uptime.txt
16.11.2006 12:30 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru - sed -i
Parameter -i je v sede od verzie 4. Redhat 3.x a mozno aj Debia stable asi maju este iba verize 3. (Aj win GNU distribucia MSYS ma len 3). Inak je uz v skoro vsetkych nezastaralych distribuciach 4 a viac.
If you hold a Unix shell up to your ear, you can you hear the C.
16.11.2006 14:59 maleprase | skóre: 28
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
nebo treba pouzit ed:

echo -e '1,10d\nw\nq\n' | ed /mnt/hda1/uptime.txt
Pavel V. avatar 16.11.2006 19:26 Pavel V. | skóre: 22 | Pardubice
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jen taková zajímavost. Skript jsem dal do cronu a výstup z aplikace uptime je v anglickém jazyce i když při běžném spuštění příkazu nebo skriptu je v češtině. Minimálně pro mě zvláštní.
16.11.2006 19:31 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru
V cronu máš jinak nastavené prostředí než když si to spouštíš z konzole, řekl bych, že to je běžné.
-- Nezdar není hanbou, hanbou je strach z pokusu.
Pavel V. avatar 16.11.2006 20:00 Pavel V. | skóre: 22 | Pardubice
Rozbalit Rozbalit vše Re: Vymazání prvních deseti řádků ze souboru
Já ještě cron nepoužil, takže je to pro mě novinka. :-)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.