Wie werden diese Daten analysiert?

401
Adrian Zhang

Ich habe eine Datei mit folgenden Daten:

15-06-18 22:00 2968 

Jeder Eintrag wird durch eine neue Zeile getrennt. Ich möchte die letzte Zahl (2968) extrahieren. Wie kann ich das machen? (Ich bin unter Linux mit bash).

Sorry, wenn ich nicht die richtigen Tags habe / am falschen Ort poste. Ich bin nicht sicher, wo ich diese Frage stellen sollte.

0
Ist die Nummer, die Sie extrahieren möchten, immer unmittelbar nach dem zweiten Leerzeichen? fixer1234 vor 5 Jahren 0
Wenn ich dich richtig verstehe, ja. Es gibt nie mehr Räume. Adrian Zhang vor 5 Jahren 0
Ich glaube, ich habe Sie gebeten, die Charaktermuster zuverlässig zu definieren. wo genau diese Nummer immer zu finden ist. Ist es immer eine vierstellige Zahl? Beginnt es immer an der 16. Stelle? Folgt es immer `nn-nn-nn nn: nn`? Kann es jemals Ausnahmen geben? fixer1234 vor 5 Jahren 2
Bitte werfen Sie einen Blick auf: [Was soll ich tun, wenn jemand meine Frage beantwortet?] (Http://superuser.com/help/someone-answers) Cyrus vor 5 Jahren 0
@ Cyrus Oh. Recht. Haha, ich habe es vergessen! Adrian Zhang vor 5 Jahren 0

5 Antworten auf die Frage

2
Cyrus

Letzte Spalte drucken:

awk '' file 

Ausgabe:

2968 

Die Variable NFwird auf die Gesamtzahl der Felder im Eingabesatz festgelegt. $ NF enthält immer den Inhalt der letzten Spalte. Noch kürzer:

awk '$0=$NF' file 
Die Variable "NF" wird auf die Gesamtzahl der Felder ** im Eingabesatz gesetzt. $ NF enthält immer den ** Inhalt ** der letzten Spalte. Noch kürzer: `awk '$ 0 = $ NF' file` Cyrus vor 5 Jahren 0
1
Adrian Zhang

Ich habe eine Lösung gefunden, die die ersten 15 Zeichen entfernt.

sed 's/^..............//' tmp.txt 

Danke, @ fixer1234!

Ich bin froh, dass du es gelöst hast. Übrigens, bei meiner Anzahl der Charaktere sieht es so aus, als würden Sie nur 15 Zeichen löschen. der 16. ist ein Teil dessen, was Sie behalten möchten. fixer1234 vor 5 Jahren 0
Richtig, Entschuldigung. Ich habe das behoben. Adrian Zhang vor 5 Jahren 0
1
C0deDaedalus

Sie können die Daten extrahieren, die Sie verwenden müssen awk, cutoder sedoder sogar eine Kombination von grep mit regex.

Wenn die Daten in jeder Zeile der Datei vorhanden sind, folgen Sie dem genauen Muster, das Sie hier dargestellt haben:

15-06-18 22:00 2968 

Dann können Sie die letzte Zahl folgendermaßen extrahieren:

awk '{ print $3 }' file_path 

Und um die Daten zu speichern, können Sie sie in eine andere Datei umleiten:

awk '{ print $3 }' file_path > new_file 

Wie es funktioniert :

Im Grunde ist awk ein sehr mächtiges Werkzeug für die Bearbeitung von Textdaten. In Ihrem Fall :

15-06-18 22:00 2968 

Die obere Zeile kann als 3 Zeichenfolgen behandelt werden, die durch ein spaceDazwischenzeichen voneinander getrennt sind. Standardmäßig behandelt awk ein Leerzeichen als Trennzeichen (durch gegeben -F).

Um etwas Spaß mit awk auszuprobieren, probieren Sie dies mit Ihren Daten aus und Sie werden es viel besser verstehen.

awk -F: '{ print $2 }' your_file awk -F- '{ print $3 }' your_file 

Fühlen Sie sich frei, um weitere Details hinzuzufügen.

1
Krishna

Angenommen, der Inhalt befindet sich in einer Datei mit dem Namen 'file', sollten die folgenden Schritte ausgeführt werden.

cut -d ' ' -f 3 file 

Ausschneiden ist ein Unix-Befehl. Aus der Manpage:

  • Ausschneiden - Entfernen Sie Abschnitte aus jeder Dateizeile
  • -d sagt das Trennzeichen zum Schneiden.
  • -f welche Felder zu wählen sind.
  • file ist die Quelldatei.

Ergebnis geht zur Standardausgabe.

`cut` ist der Befehl 'unix`. Von der Manpage aus können Sie aus jeder Dateizeile Abschnitte entfernen. "-d" sagt das Trennzeichen, das zum Schneiden verwendet werden soll. `-f` wählt die zu schneidenden Felder (oder Spalten) aus. Krishna vor 5 Jahren 0
0
Ljm Dullaart

Oder in Bash:

#!/bin/bash  cat "$1" | while read day hour value ; do echo $value done