Leere Felder füllen

8

Ich habe eine sehr große tabulatorgetrennte Datei (ungefähr 12 Millionen Zeilen), die so aussieht:

%Vor%

Gibt es eine Möglichkeit, wie ich das machen kann:

%Vor%

Ich habe versucht, sed-Skripte zu verwenden, aber es dauert so lange.

Zum Beispiel

%Vor%

Ich könnte es in Excel mit

machen %Vor%

und ziehen nach unten. Excel erlaubt mir jedoch nur eine bestimmte Anzahl von Zeilen zu laden.

(Angenommen, ich habe "F1" nach C1 kopiert)

Sicherlich gibt es einen einfacheren Weg mit awk oder sed?

    
Oddish 05.12.2016, 20:17
quelle

7 Antworten

2

Ich schlage vor:

%Vor%     
Cyrus 05.12.2016, 20:38
quelle
6
%Vor%

Zuordnungen sind rechtsassoziativ, also

%Vor%

entspricht

%Vor%

und damit

%Vor%

und

%Vor%     
ikegami 05.12.2016 20:43
quelle
4

awk zur Rettung!

%Vor%

Dies ist die Eingabedatei, die ich verwendet habe

%Vor%     
karakfa 05.12.2016 20:32
quelle
2

Der Perl-Befehl würde etwa so aussehen:

%Vor%

Lesbarer:

%Vor%

Und dann:

%Vor%

(Sie können auch das Flag "-i" verwenden, um die Datei "in Place" zu überschreiben, aber das spart Ihnen während der Laufzeit nicht wirklich Zeit und Speicherplatz.)

Trotzdem, wie lange Ihre Datei auch dauert, so lange dauert das.

    
Tanktalus 05.12.2016 20:31
quelle
2

Dies ist sed Lösung:

%Vor%

Zeitverbrauch und Vergleich mit anderen awk-Lösungen

Dies ist Code zum Testen (Bash-Skript)

%Vor%

und Ergebnisse (für 46kB Eingabedatei):

%Vor%

Schlussfolgerungen

@Tanktalus perl solution hat die beste Leistung, aber awk @karakfa und awk @Cyrus solutions kommen auch gut zurecht.

Offtopic

Diese sed -Lösung hat die beste Leistung bei kleineren Dateien (aus diesem Beispiel und für 8k-Dateien), ist aber bei größeren Daten sehr langsam.

    
Marek Nowaczyk 06.12.2016 09:17
quelle
1
%Vor%

Verwendung:

%Vor%     
slitvinov 05.12.2016 20:35
quelle
1
%Vor%     
Ed Morton 05.12.2016 23:29
quelle

Tags und Links