it-swarm.com.de

Wie kann ich die gesamte Datei in ein bestimmtes Format konvertieren?

Ich habe eine Datei von 1 GB und möchte sie in ein bestimmtes Format konvertieren. Die Datei enthält die folgenden URLs:

google.com
trafficinviter.com
example.com

Ich möchte den gesamten Inhalt in dieses Format konvertieren:

"http://google.com","http://trafficinviter.com","http://example.com"

Ubuntu benutzen. Dies ist genau das Format des Arrays PHP. Daher möchte ich wissen, wie ich in dieses Format konvertieren und in einer anderen Datei speichern kann.

5
Jaffer Wilson

Ich würde das in Perl machen:

$ Perl -lne 'printf "\"http://$_\","' file | sed 's/,$/\n/'
"http://google.com","http://trafficinviter.com","http://example.com"

Der -l entfernt Zeilenumbrüche am Ende jeder Zeile (fügt außerdem jedem print -Aufruf einen \n hinzu, weshalb ich stattdessen printf verwende). Der -ne bedeutet, dass "das von -e angegebene Skript in jeder Zeile der Eingabedatei ausgeführt wird. Das Skript selbst gibt "http://, die aktuelle Zeile ($_) und ", aus. Dann entfernt das sed das abschließende Komma.


Alternativ können Sie Folgendes tun:

$ sed 's#^#"http://#;s#$#"#' file | tr "\n" "," | sed 's/,$/\n/'
"http://google.com","http://trafficinviter.com","http://example.com"

Hier ersetzt das 1. sed den Anfang jeder Zeile (^) durch "http:// und das Ende jeder Zeile ($) durch "; Das tr ersetzt jedes Newline-Zeichen durch ein Komma und das 2. sed entfernt das letzte nachgestellte Komma.

9
terdon

Du könntest es so machen:

tr '\n' ',' < file | sed 's#[^,]\+#"http://&"#g;s#,$#\n#'

Erläuterung

  • tr '\n' ',' <file Ersetzen Sie Zeilenumbrüche durch Kommas in file
  • | Pipe-Ausgabe an
  • s#[^,]\+#"http://&"#g Ersetzen Sie eine Reihe von Zeichen ohne Komma durch die gleichen Zeichen, denen http:// vorangestellt und die von "Anführungszeichen" umgeben sind.
  • s#,$#\n# Entfernen Sie das letzte Komma und ersetzen Sie es durch eine neue Zeile

Hinweis: Dies schlägt fehl, wenn die URLs Kommas enthalten. Wenn dies in Ihrem Fall möglich ist, verwenden Sie terdons Antwort für zuverlässige Ergebnisse

7
Zanna

Awk Lösung

awk '{ printf("\"%s\",", $0) }' input.txt

PHP erlaubt die Beendigung von Kommas in Array-Literalen, wenn ich mich richtig erinnere.

5
David Foerster