You are not logged in.

Dear visitor, welcome to VDR Portal. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Saturday, July 12th 2008, 11:59am

TV-Kanäle aussortiren

Hallo,

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

Source code

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.
YaVDR-0.5 Stable - DVB-C - Nvidia GT520

ULF

Sage

Posts: 3,898

Location: Niedersachsen

  • Send private message

2

Saturday, July 12th 2008, 12:35pm

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

Sunday, July 13th 2008, 12:41am

@ULF

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


Trotzdem Danke!
YaVDR-0.5 Stable - DVB-C - Nvidia GT520

SHF

Sage

Posts: 3,867

Location: hessische Bergstrasse

  • Send private message

4

Monday, July 14th 2008, 1:25am

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.

Source code

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


Mein VDR:

vdr-1.4.3-4 mit BigPatch und Plugin BigPack, SuSE 9.0, Kernel 2.4.21, DVB Treiber 06.07.2005 FullTS-Patch, noad 0.6.1
auf HP Vectra VLi8 (PIII 500, 256MB), 16GB 2,5" SSD (Sytem und Swap), 2TB HDD* (Video), 1x TT FF DVB-S 1.5 FullTS-Mod, 1x TT Budget DVB-S

(* Weil ich das inzwischen öfters gefragt wurde: Nein, das BIOS erkennt die grossen Platten nicht vollständig, das stört Linux aber nicht!)

5

Monday, July 14th 2008, 5:24pm

@SHF

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

Source code

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

Und so habe es eingetragen:

Source code

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.
YaVDR-0.5 Stable - DVB-C - Nvidia GT520

6

Monday, July 14th 2008, 5:29pm

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

7

Monday, July 14th 2008, 7:13pm

@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:

Source code

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

Source code

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!
YaVDR-0.5 Stable - DVB-C - Nvidia GT520

This post has been edited 1 times, last edit by "neptunvasja" (Jul 14th 2008, 7:16pm)


SHF

Sage

Posts: 3,867

Location: hessische Bergstrasse

  • Send private message

8

Tuesday, July 15th 2008, 12:48am

Quoted

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

Quoted

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:

Quoted

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


Mein VDR:

vdr-1.4.3-4 mit BigPatch und Plugin BigPack, SuSE 9.0, Kernel 2.4.21, DVB Treiber 06.07.2005 FullTS-Patch, noad 0.6.1
auf HP Vectra VLi8 (PIII 500, 256MB), 16GB 2,5" SSD (Sytem und Swap), 2TB HDD* (Video), 1x TT FF DVB-S 1.5 FullTS-Mod, 1x TT Budget DVB-S

(* Weil ich das inzwischen öfters gefragt wurde: Nein, das BIOS erkennt die grossen Platten nicht vollständig, das stört Linux aber nicht!)

This post has been edited 1 times, last edit by "SHF" (Jul 15th 2008, 11:33pm)


9

Tuesday, July 15th 2008, 4:34pm

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

Source code

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


Ergebniss:

Source code

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:

Source code

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.
YaVDR-0.5 Stable - DVB-C - Nvidia GT520

SHF

Sage

Posts: 3,867

Location: hessische Bergstrasse

  • Send private message

10

Tuesday, July 15th 2008, 11:35pm

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


Mein VDR:

vdr-1.4.3-4 mit BigPatch und Plugin BigPack, SuSE 9.0, Kernel 2.4.21, DVB Treiber 06.07.2005 FullTS-Patch, noad 0.6.1
auf HP Vectra VLi8 (PIII 500, 256MB), 16GB 2,5" SSD (Sytem und Swap), 2TB HDD* (Video), 1x TT FF DVB-S 1.5 FullTS-Mod, 1x TT Budget DVB-S

(* Weil ich das inzwischen öfters gefragt wurde: Nein, das BIOS erkennt die grossen Platten nicht vollständig, das stört Linux aber nicht!)

11

Thursday, July 17th 2008, 2:55pm

@SHF

Ja, jetzt gehts :) Vielen Dank.
YaVDR-0.5 Stable - DVB-C - Nvidia GT520