Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: VDR Portal. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

Samstag, 12. Juli 2008, 11:59

TV-Kanäle aussortiren

Hallo,

Ich habe hier ein Script, der die channels.conf nach Frequency sortiert:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash
dir="/channels"
outdir="/tmp"

cd $dir

for a in S*conf ; do SAT=$(echo $a|cut -d _ -f1); cat $a | while read b ;  do FIRST=$(echo $b|cut -d : -f-3 ) ; LAST=$(echo $b|cut -d : -f5- ) ; echo $FIRST:$SAT:$LAST >>tmp;done ; mv tmp $a ; done


if [ ${dir:${#dir}-1:${#dir}} != "/" ]
        then
        dir=$dir"/"
fi

for file in `ls ${dir}*.conf`
do
        filename=${file/`dirname $file`/}
        if [ ${filename:0:1} = "/" ]
                then
                filename=${filename:1:${#filename}}
        fi
        if [ -e $outdir/$filename ]
                then
                echo "File $filename already exists! Aborting this file."
                continue
        fi
        touch $outdir/$filename
        exec 3< <(sort -g -t : -k 2 $file)
        tmp=""
        while read line
        do
                T=`echo $line | cut -d: -f2`
                if [ "$T" != "$tmp" ]
                        then
                        echo " " >> $outdir/$filename
                        echo ":== Frequency $T MHz ==" >> $outdir/$filename
                fi
                echo $line >> $outdir/$filename
                tmp=$T
        done <&3
        exec 3<&-
done


Wie soll man den Script erweitern, damit er mir zB. nur TV-Kanäle in $outdir abspeichert? Sprich wenn VPID nicht 0 ist. Aber gleichzeitig die Trennzeichen ":== Frequency" überall einfügt.


Danke.

ULF

Erleuchteter

Beiträge: 3 898

Wohnort: Niedersachsen

  • Nachricht senden

2

Samstag, 12. Juli 2008, 12:35

Moin,
du könntest das benutzen:

http://www.zappkultur.de/

um vorher alle VPID != 0 rauszuwerfen?

Gruß Ulf
Antec Fusion Black, M3N78-VM, Athlon 4850e, 2xDVB-c, yavdr

3

Sonntag, 13. Juli 2008, 00:41

@ULF

Danke für Hilfe, aber da werden die Kanäle einfach aussortiert u. nicht die gewünschten Trennzeichen ":== Frequency" miteingefügt :)


Trotzdem Danke!

SHF

Erleuchteter

Beiträge: 3 962

Wohnort: hessische Bergstrasse

  • Nachricht senden

4

Montag, 14. Juli 2008, 01:25

Man muss nur alle Kanäle mit einer VideoPID von 0 oder 1 entfernen.
Eigentlich sollte es klappen das folgende nach Zeile 31 (nach dem do) einzufügen.

Quellcode

1
2
3
4
T=`echo $line | cut -d: -f6`
if [ "$T" = "0" -o  "$T" = "1" ]
   continue
fi
Gruss
SHF


Mein (neuer) VDR:

Software:
Debian Wheezy mit Kernel 3.14
VDR 2.0.7 & div. Plugins aus YaVDR-Paketen
noad 0.8.6

Hardware:
MSI C847MS-E33, onboard 2x1,1GHz Sandybridge Celeron 847, 4GiB RAM
32GB SSD (System), 4TB 3,5" WD-Red HDD (Video)
TT FF DVB-S 1.5 FullTS-Mod PWM-Vreg-Mod, DVB-Sky 852 Dual DVB-S2
Das ganze im alten HP Vectra VLi8-Gehäuse versorgt von:
PicoPSU-160-XT und Meanwell EPP-150 im ATX-NT-Gehäuse

5

Montag, 14. Juli 2008, 17:24

@SHF

Danke für Hilfe, leider gibt es wohl ein syntax error:

Quellcode

1
2
3
./test.sh: line 38: syntax error near unexpected token `fi'
./test.sh: line 38: `                fi'
vdr:~#

Und so habe es eingetragen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/bin/bash
dir="/channels"
#outdir="/tmp"
TV="/channels/TV"

rm -f $TV/*.conf

cd $dir

for a in S*conf ; do SAT=$(echo $a|cut -d _ -f1); cat $a | while read b ;  do FIRST=$(echo $b|cut -d : -f-3 ) ; LAST=$(echo $b|cut -d : -f5- ) ; echo $FIRST:$SAT:$LAST >>tmp;done ; mv tmp $a ; done


if [ ${dir:${#dir}-1:${#dir}} != "/" ]
        then
        dir=$dir"/"
fi

for file in `ls ${dir}*.conf`
do
        filename=${file/`dirname $file`/}
        if [ ${filename:0:1} = "/" ]
                then
                filename=${filename:1:${#filename}}
        fi
        if [ -e $TV/$filename ]
                then
                echo "File $filename already exists! Aborting this file."
                continue
        fi
        touch $TV/$filename
        exec 3< <(sort -g -t : -k 2 $file|sed "s/(null)/Unknown/g"|sed -e 's/[a-zA-Z]/\U&/g')
        tmp=""
        while read line
        do
                T=`echo $line | cut -d: -f6`
                if [ "$T" = "0" -o  "$T" = "1" ]
                continue
                fi
                
                T=`echo $line | cut -d: -f2`
                
                if [ "$T" != "$tmp" ]
                        then
                        echo " " >> $TV/$filename
                        echo ":== Frequency $T MHz ==" >> $TV/$filename
                fi
                echo $line >> $TV/$filename
                tmp=$T
        done <&3
        exec 3<&-
done


Danke.

6

Montag, 14. Juli 2008, 17:29

Fehlt da nicht ein "then" zwischen Zeile 36/37?

7

Montag, 14. Juli 2008, 19:13

@Ioannis

Danke, genau das war es auch :)

Jetzt habe ich nach eine Lösung gesucht, dass man die Zeilen rausschmeissen soll, die bei VPID eine Zahl grösser als 0 oder 1 haben, hier ist mein Versuch:

Quellcode

1
2
3
4
5
                T=`echo $line | cut -d: -f6`
                if [ "$T" = "0" -gt  "$T" = "1" ]
                then
                continue
                fi

Quellcode

1
./test.sh: line 88: [: too many arguments

da habe also statt -o das -gt eingefügt, das hat natürlich nicht geklappt. Wie ist denn eigentlich der richtige Syntax?

Danke!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »neptunvasja« (14. Juli 2008, 19:16)


SHF

Erleuchteter

Beiträge: 3 962

Wohnort: hessische Bergstrasse

  • Nachricht senden

8

Dienstag, 15. Juli 2008, 00:48

Zitat

Original von Ioannis
Fehlt da nicht ein "then" zwischen Zeile 36/37?
Äääh ja :versteck.

Zitat

Original von neptunvasja
Jetzt habe ich nach eine Lösung gesucht, dass man die Zeilen rausschmeissen soll, da habe also statt -o das -gt eingefügt, das hat natürlich nicht geklappt. Wie ist denn eigentlich der richtige Syntax?
-gt geht da nicht, da es sich nicht um Zahl-Variablen handelt.
Mein Vorschlag währe folgender:

Zitat

if [ ! "$T" = "0" -a ! "$T" = "1" ]
Gruss
SHF


Mein (neuer) VDR:

Software:
Debian Wheezy mit Kernel 3.14
VDR 2.0.7 & div. Plugins aus YaVDR-Paketen
noad 0.8.6

Hardware:
MSI C847MS-E33, onboard 2x1,1GHz Sandybridge Celeron 847, 4GiB RAM
32GB SSD (System), 4TB 3,5" WD-Red HDD (Video)
TT FF DVB-S 1.5 FullTS-Mod PWM-Vreg-Mod, DVB-Sky 852 Dual DVB-S2
Das ganze im alten HP Vectra VLi8-Gehäuse versorgt von:
PicoPSU-160-XT und Meanwell EPP-150 im ATX-NT-Gehäuse

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »SHF« (15. Juli 2008, 23:33)


9

Dienstag, 15. Juli 2008, 16:34

Irgendwie geht es nicht, dass die Zeilen mit VPID grösser als 0 rausgeschmiessen werden:

Quellcode

1
cat /channels/RADIO/*.conf|cut -d":" -f6 | sort | uniq > test.conf


Ergebniss:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
0
100
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
101
1010
1011
1012
1013
1014
1015
1016
1017
1018
1020
1021
1024
1025
1026
103
1042
105
1056
1060
106+105
1065
1071
........


Aber mit TV Kanälen geht es wohl:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
100
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
101
1010
1011
1012
1013
1014
1015
da kommt kein 0 vor.

SHF

Erleuchteter

Beiträge: 3 962

Wohnort: hessische Bergstrasse

  • Nachricht senden

10

Dienstag, 15. Juli 2008, 23:35

Ja, ist mein Fehler, hatte beim copy&paste die falsche Zeile erwischt.
Ist inzwischen oben korrigiert.
Gruss
SHF


Mein (neuer) VDR:

Software:
Debian Wheezy mit Kernel 3.14
VDR 2.0.7 & div. Plugins aus YaVDR-Paketen
noad 0.8.6

Hardware:
MSI C847MS-E33, onboard 2x1,1GHz Sandybridge Celeron 847, 4GiB RAM
32GB SSD (System), 4TB 3,5" WD-Red HDD (Video)
TT FF DVB-S 1.5 FullTS-Mod PWM-Vreg-Mod, DVB-Sky 852 Dual DVB-S2
Das ganze im alten HP Vectra VLi8-Gehäuse versorgt von:
PicoPSU-160-XT und Meanwell EPP-150 im ATX-NT-Gehäuse

11

Donnerstag, 17. Juli 2008, 14:55

@SHF

Ja, jetzt gehts :) Vielen Dank.

Immortal Romance Spielautomat