2016-07-11 4 views
1

Ich habe eine Datei mit einigen Zeilen mit dem gleichen Namen (Spalte 1, zB gph am stp), sondern in dem Maximalwert Spalt 2 und die anderen Zeilen in Linux ausschließen (Shell, zB awk grep Perl)Ausschließen von Zeilen, in denen Spalte eins und zwei den gleichen Wert haben?

Zum Beispiel :

col1 | col2 | col3 | col4 
------+------+--------+----------- 
ghp | 25 | data1 | otherdata1 
ghp | 23 | data2 | otherdata2 
ghp | 23 | data3 | otherdata3 
jkl | 58 | data4 | otherdata4 
stp | 42 | data5 | otherdata5 
stp | 41 | data6 | otherdata6 
stp | 41 | data7 | otherdata7 

Ergebnis

col1 | col2 | col3 | col4 
------+------+--------+----------- 
ghp | 25 | data1 | otherdata2 
jkl | 58 | data4 | otherdata4 
stp | 42 | data5 | otherdata7 

in der gleichen Datei, die ich einige Zeilen mit dem gleichen Namen (Spalte 1, zB ghi ans stu) und in der Spalte 2 die gleichen Werte haben, möchte ich ausschließen Diese Zeilen in Linux (Shell, zB awk grep perl)

Zum Beispiel

col1 | col2 | col3 | col4 
------+------+--------+----------- 
ghi | 23 | data1 | otherdata1 
ghi | 23 | data2 | otherdata2 
ghi | 23 | data3 | otherdata3 
jkl | 58 | data4 | otherdata4 
stu | 41 | data5 | otherdata5 
stu | 41 | data6 | otherdata6 
stu | 41 | data7 | otherdata7 

Ergebnis:

col1 | col2 | col3 | col4 
------+------+--------+----------- 
jkl | 58 | data4 | otherdata4 

Dank

+0

Linux ist ein Betriebssystem in C geschrieben, tun Sie Möchtest du das in C machen? Oder hast du eine bestimmte Shell, wie 'bash', im Hinterkopf? Oder vielleicht ein Terminal? –

+0

Sind die Zeilen mit den gleichen Namen immer zusammen gruppiert? – choroba

+0

Danke Jonny, ich kann in der Shell mit awk verwenden wird es viel besser als C –

Antwort

1

Sie diesen awk Befehl verwenden können:

awk 'NR<=2{print; next} $2>max[$1]{max[$1]=$2; a[$1]=$0} END{for (i in a) print a[i]}' file 

col1 | col2 | col3 | col4 
------+------+--------+----------- 
ghp | 25 | data1 | otherdata1 
jkl | 58 | data4 | otherdata4 
stp | 42 | data5 | otherdata5 
+1

Vielen Dank Anubhava. Perfekt! es funktioniert ausgezeichnet! Kannst du mir kurz erklären, was "NR <= 2" bedeutet? –

+0

'NR <= 2 {...}' dient zum Drucken der 2 Kopfzeilen wie sie sind. – anubhava

Verwandte Themen