Ich habe großen Text auf Linux Centos 7 Server und ich möchte Zeilen entfernen, die vor dem ersten Komma übereinstimmen
Eingang:
112112112,00,00,00
110110,01,01,02
112112112,11,11,888
110110,99,88,8
410410,22,22,22
Ausgabe:
410410,22,22,22
Antwort1
Hier sind ein paar awk
Zwei-Durchgang-Lösungen. Der erste Durchgang speichert die Häufigkeit von Feld 1 in einem Array x
. Der zweite Durchgang druckt eine Zeile, wenn x
die Häufigkeit von Feld 1 als 1 gemeldet wird.
awk -F, 'first_pass{x[$1]++; next}; x[$1] == 1' first_pass=1 file first_pass=0 file
awk -F, 'BEGIN{while ((getline<ARGV[1]) > 0)x[$1]++}; x[$1] == 1' file
Antwort2
Kurzes GNUdatamash
+sed
Kombination:
datamash -sft',' -g1 count 1 <file | sed -n 's/,1$//p'
Der erste Prozess der obigen Pipeline zählt die Anzahl der Elemente in jeder Gruppe der ersten Feldwerte (gruppiert nach -g1
) und fügt die resultierenden Zählungen als letztes Feld hinzu