Zeilen gleichen Inhalts durchnummerieren - AWK? SED?

J

Jonz

Grünschnabel
Hi,

ich habe eine Datei, in der sich die einzelnen Zeilen unterschiedlich oft wiederholen, z.B.

10
10
23
23
23
23
45
45
45

Ich möchte nun in einer neuen Spalte die gleichen Zeilen folgendermaßen durchnummerieren:

10 1
10 2
23 1
23 2
23 3
23 4
45 1
45 2
45 3

Weiß jemand, wie sich das mit einfachen Shell-Kommandos wie AWK oder SED realisieren lässt?

Danke & beste Grüße,
Jonz
 
Schleife über sort -u, aktueller Schleifenwert grep -c auf Originaldatei.
 
Danke, klingt gut und einfach. Versteh's nur noch nicht so ganz. Hab sort -u ausprobiert und erhalte eine Datei, in der identische Zeilen auf eine einzige Zeile reduziert werden. Ich seh nur noch nicht, inwiefern mir das weiterhilft. Wie ist das mit der Schleife gemeint?
 
Pseudocode:
Code:
gehe über unique-Sort von $datei als $element
mache
  zähle anzahl von $element in $datei
  gib aus $element und $anzahl
ehcma
 
Hm, ich gehe als Element über etwas, was der unique-Sort meiner Datei ist? Ähhm, ja, alles klar... Ok, vielleicht sollte ich meine Frage anders formulieren: Wie spreche ich in einer Datei zwei aufeinanderfolgende Zeilen an, um diese im Anschluss zu vergleichen? Das Konzept des erforderlichen Codes ist mir klar, ich könnte mir einen Matlab Code vorstellen, der mein Problem löst, der sähe in etwa so aus:

load input
output=zeros(length(input));
output(1)=1;

count=1;

for i=2:length(input)
if input(i-1)==input(i)
count=count+1;
else
count=1;
end
output(i)=count
end

Ich hätte nur lieber eine Lösung für die shell, damit sich das Ganze automatisch vom Skript aus starten lässt.
 
Hm, ich gehe als Element über etwas, was der unique-Sort meiner Datei ist? Ähhm, ja, alles klar...
Nein, tust Du nicht. Du gehst mit den Unique-Elementen über die Usprungsdatei.

Ok, vielleicht sollte ich meine Frage anders formulieren: Wie spreche ich in einer Datei zwei aufeinanderfolgende Zeilen an, um diese im Anschluss zu vergleichen? Das Konzept des erforderlichen Codes ist mir klar, ich könnte mir einen Matlab Code vorstellen, der mein Problem löst, der sähe in etwa so aus:

load input
output=zeros(length(input));
output(1)=1;

count=1;

for i=2:length(input)
if input(i-1)==input(i)
count=count+1;
else
count=1;
end
output(i)=count
end

Ich hätte nur lieber eine Lösung für die shell, damit sich das Ganze automatisch vom Skript aus starten lässt.
öhm, das ist aber ein komplett andere Aufgabenstellung als im Eröffnungsposting...

Wobei ich beim nochmals genauen nachschauen das glaube ich am Anfang falsch verstanden habe...
 
Kein Problem, trotzdem danke - ich werd's mal mit 'nem C-Programm versuchen.
 
Wie spreche ich in einer Datei zwei aufeinanderfolgende Zeilen an, um diese im Anschluss zu vergleichen?
Code:
#!/bin/bash
count=1
line2=""
while read line; do
  if [ "$line" = "$line2" ]; then
    ((count++))
  else
    count=1
  fi
  echo "$line $count"
  line2="$line"
done <DEINEDATEI
 
Genial, läuft perfekt & super einfache Lösung - genau das, was ich wollte! Mille Grazie!!
 

Ähnliche Themen

Mit AWK verschiedene Felder verschiedener Zeilen vergleichen

Spalten einer Datei in neue Datei integrieren.

Bestimmte Zeilen einer Spalte addieren

[Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

Zeilen kopieren mit SED

Zurück
Oben