2012-04-03 2 views
2

Ich bin neu bei Shell-Skripten und ich versuche, Daten aus einer TXT-Datei im folgenden Format zu lesen.Lesen von Daten aus einer Datei mit awk

A: 1, 2, 3, 4

B: 1,2; 3, 4

hier ist mein Code:

awk -F ': /, /, /' '{echo $ 2 $ 3 $ 4 $ 5 $ 5}' f 'testread.txt'

ich nur brauche die Zahlen aus der Textdatei. Danke.

Antwort

2

Der einfachste Weg ist wahrscheinlich, nur Ihr Feld Trennzeichen "alles, was nicht numerisch ist".

[[email protected] ~]$ cat input.txt 
A: 1, 2, 3, 4 
B: 1,2; 3, 4 
[[email protected] ~]$ awk -F'[^0-9]+' '{$1=$1; print;}' input.txt 
1 2 3 4 
1 2 3 4 
[[email protected] ~]$ 

Die $1=$1 Bit sind nur awk zu zwingen $0 unter Verwendung der Standard-Ausgabefeldtrennzeichen neu zu schreiben.

Update:

Deutlichere Ausgabe:

[[email protected] ~]$ awk -F'[^0-9]+' '{printf("1=%s 2=%s 3=%s 4=%s 5=%s\n", $1, $2, $3, $4, $5);}' input.txt 
1= 2=1 3=2 4=3 5=4 
1= 2=1 3=2 4=3 5=4 
[[email protected] ~]$ 
+0

Vielen Dank. Ich verstehe, was Sie getan haben, aber ich muss die Zahlen später für weitere Berechnungen verwenden. Wie würde ich das mit dieser Methode machen? – tosheikh

+0

Nun, was willst du mit den Zahlen machen? In dem obigen Fall sind die Werte von $ 2, $ 3 usw. alles, was sie in Ihrem ursprünglichen Skript waren. Der Ausdruck von $ 0 diente nur der Bequemlichkeit. Siehst du den Raum vor der 1? Das ist das Feldtrennzeichen, da in Ihrer Eingabedatei vor der ersten Zeichenfolge mit nicht numerischen Daten keine Zahl vorhanden ist. – ghoti

+0

Ich möchte sie einigen Variablen zuweisen. Ich habe Matrizen verschiedener Größen und muss einfache Addition Subtraktion zwischen ihnen tun. – tosheikh

2

Es gibt mehrere Probleme mit dem Befehl.

  1. Das Argument für die -F Option ist ein regulärer Ausdruck, der gewünschten Trennzeichen angibt. Um Doppelpunkte, Kommas oder Semikolons als Trennzeichen auszuwählen, müssen Sie Pipes und keine Schrägstriche verwenden. Alternativ könnten Sie einen Klammerausdruck verwenden.

  2. Die AWK-Anweisung zur Ausgabe von Text lautet print, nicht echo.

  3. Die Option -f gibt eine Datei an, die ein AWK-Programm enthält, keine Eingabedatei. Sie benötigen keine -f, um eine Eingabedatei anzugeben.

Sie wollen etwas mehr wie folgt aus:

awk -F '[:,;]' '{ print $2 $3 $4 $5 }' testread.txt 
+0

Vielen Dank für die Korrekturen. Es ist jetzt sehr klar. – tosheikh