Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: compaq 23 Prosince 2011, 01:00:55
-
Jsem laik a potřebuji u všech souborů z GPS Trackeru SONY (*.log) odstranit pro další zpracování v gpsbabel stejný první řádek:
Příklad:
*.log před úpravou
@Sonygps/ver1.0/wgs-84/gps-cs3.0
$GPGGA,150018,5004.8976,N,01424.9536,E,1,03,05.7,00204.5,M,045.5,M,00,0000*42
$GPGSA,A,2,01,11,23,,,,,,,,,,05.8,05.7,00.9*05
po úpravě
$GPGGA,150018,5004.8976,N,01424.9536,E,1,03,05.7,00204.5,M,045.5,M,00,0000*42
$GPGSA,A,2,01,11,23,,,,,,,,,,05.8,05.7,00.9*05
Neumím si napsat skript. Pomůže někdo? Díky.
-
Předpokládám, že máš všechny soubory s kterými chceš manipulovat v jedné složce. Dále tak také nesmíš mít jiné s koncovkou log (jinak se jim také umaže řádek). Samozřejmě by to šlo ošetřit, ale to bych ti nenapsal v noci.
#!/bin/bash
for i in *.log ; do # cyklus, projde vsechny soubory s priponou log
sed '1d' "$i" > "${i}.tmp"; # smaze prvni radku a ulozi do noveho souboru (s koncovkou tmp)
rm "$i" ; # smaze puvodni soubor
mv "${i}.tmp" "${i}" ; # prejmenuje novy soubor na nazev stareho
done;
Čili
1) Tohle (skript) ulož jako prostý textový soubor s koncovkou .sh.
2) Pak si naskládej kopie logů do jedné složky
3) V dané složce si otevři terminál
4) Učiň skript spustitelným (musíš ho mít ve stejné složce):
chmod +x <skript>.sh
5) Spusť ho:
./<skript>.sh
Za <skript>.sh vždy doplň název skriptu.
Skript jsem netestoval (nejsem u linuxu), ale pokud si to zkusíš na kopii dat, tak nic nezkazíš.
-
Díky moc. Vyzkouším.
Ještě mě v noci napadlo, jestli neexistuje nějaký příkaz "vezmi ze souboru x.txt znaky 12 až konec a ulož ho tak, nebo tak něco bylo v historických jazycích... :-)
První řádek v logu je vždy stejný...
-
No to by ten sed uměl také. Problém je, že sed je streamový (proudový) editor a neumí rovnu vzít soubor a upravit ho. Vždy mu musíš dát vstupní a výstupní soubor.
Což mi připomnělo jak je to správněji:
#!/bin/bash
for i in *.log ; do # cyklus, projde vsechny soubory s priponou log
ed "$i" <<<'1d
w'
done;
-
man head
man tail
;)
-
No to by ten sed uměl také. Problém je, že sed je streamový (proudový) editor a neumí rovnu vzít soubor a upravit ho. Vždy mu musíš dát vstupní a výstupní soubor.
Což mi připomnělo jak je to správněji:
Ale umí, viz přepínač -i ;)
-
No to by ten sed uměl také. Problém je, že sed je streamový (proudový) editor a neumí rovnu vzít soubor a upravit ho. Vždy mu musíš dát vstupní a výstupní soubor.
Což mi připomnělo jak je to správněji:
Ale umí, viz přepínač -i ;)
IMHO:
1) GNU extensions
2) V reálu to bude procovat tak, že to vytvoří dočasný soubor a tamten pak nahradí. Ed by to měl opravdu jen editnout (což by mohlo být znát u nějakých gigantických logů).
Což je v tomto případě samozřejmě jedno. Ale obecně je lepší snažit se šetřit zdroji vždy.
-
ahoj potreboval bych vypsat stav raid pole, ale skoncil jsem na tom, ze mi u awk nebere $4 a bere to jako promennou. jak by to slo obejit?
#!/bin/bash
RAIDHODNOTA="cat /proc/mdstat | grep blocks | awk '{ print $4 }'"
echo $RAIDHODNOTA
exit 0
Dekuji
-
když ty uvozovky vyměníš za protičárky (jak to asi chceš mít) tak ti to fungovat bude
RAIDHODNOTA=`cat /proc/mdstat | grep blocks | awk '{ print $4 }'`
taky nemusíš používat awk, na takhle jednoduché věci stačí cut
RAIDHODNOTA=`cat /proc/mdstat | grep blocks | cut -d" " -f4`
-
super, dekuji:)