Verwenden
wc
undhead
undtail
:half=$(( $(wc -l "$file")/2 )) head -$half | egrep -c dead | xargs echo "$file" $half > log_1 tail -$half | egrep -c dead | xargs echo "$file" $half > log_2
Mit
split
:split -a1 --numeric-suffixes=1 -n 'l/2' "$file" "$file"_ echo "$file" "$file"_1 $(egrep -c dead "$file_1") > log_1 echo "$file" "$file"_2 $(egrep -c dead "$file"_2) > log_2 rm "$file"_[12]
Aufteilen einer Datei: Ersetzen Sie "egrep" in "sed"
Ich möchte meine $ -Datei mit x Zeilen in zwei Hälften teilen und überprüfen, wie viele Zeilen in einem Protokoll " tot " sind. Ich habe mit folgendem begonnen:
half=`expr $(egrep -c . $file) / 2` sed -n 1,$p $file | xargs echo $file $half $(egrep -c dead $I) > log_1 sed -n $,$p | xargs echo $file $half $(egrep -c dead $I) > log_2
Die Ausgabe für den ersten sed
Befehl ist in Ordnung, aber beim Ersetzen egrep
im Bereich des Befehls ist ein Fehler sed
aufgetreten:
DeadOrAlive 5 2 -bash: $,$p: bad substitution
Gibt es eine effizientere Möglichkeit, die Datei aufzuteilen bash
?
2 Antworten auf die Frage
Hier ist eine Awk-Lösung.
awk '/dead/ { a[++n] = NR } END { for (i=1; i<=n; i++) if (a[i] > NR/2) break print ARGV, int(NR/2), i-1 >"log_1"; print ARGV, int(NR/2)+(int(NR/2)!=NR/2), n-i+1 >"log_2" }' file
Wir sammeln im Array a
die Zeilennummern der Übereinstimmungen. Wir ermitteln dann, wie viele der Zeilennummern im Array kleiner als die mittlere Zeile sind. Ihre Zählung wird der ersten Partition zugewiesen. (Wir müssen verwenden, i-1
da wir den Partitionierungspunkt bereits überschritten haben, wenn wir break
die Schleife verlassen.)
Im Allgemeinen möchten Sie vermeiden, dass dieselbe Datei mehrmals gelesen wird, insbesondere wenn sie groß ist. und zweitens versuchen Sie, die Anzahl der Prozesse zu minimieren.
Es ist nicht klar, was das mittlere Ausgabefeld enthalten soll. Wenn die Datei eine ungerade Anzahl von Zeilen enthält, enthält die erste "Hälfte" eine Zeile weniger als die zweite Partition. (Dies ist nicht schwer zu ändern, aber Sie müssen sich auf die eine oder andere Weise entscheiden.)
Verwandte Probleme
-
9
Was ist der Unterschied zwischen den Befehlen "su -s" und "sudo -s"?
-
4
Gutes freies Ubuntu Server-VMWare-Image benötigt
-
4
Was sind die Unterschiede zwischen den großen Linux-Distributionen? Werde ich es merken
-
2
Begrenzung der CPU-Auslastung für Flash in Firefox?
-
2
Wie kann ich mein Mikrofon unter Debian GNOME zum Laufen bringen?
-
2
Conky-Setups - Beispiele / Ideen?
-
3
Was sind die Unterschiede zwischen Linux Window Managern?
-
2
ThunderBird / Lichtsynchronisation mit SE k770i
-
4
Linux-Dateisystem
-
6
Vollbild-Flash langsam in KDE 4