Wie kann ich wiederholte Zeilen entfernen, indem ich nur den Text einer Spalte berücksichtige?

Wie kann ich wiederholte Zeilen entfernen, indem ich nur den Text einer Spalte berücksichtige?

Ich habe folgende Datei:

ICR1 +
ICR1+1+3199 +
ICR1+2526+2828 +
IRT1 +
IRT1+1+1489 +
IRT1+713+937 +
LSR1 -
LSR1+1+1175 -
LSR1+366+638 -
NME1 +
NME1+1+340 +
NME1+2+118 +
PWR1 -
PWR1+1+941 -
PWR1+724+939 -
Q0017 -
Q0017+1+162 -
Q0020 -
Q0020+1370+1513 -
Q0020+1+440 -

Die erste und zweite Spalte sind durch Tabulatoren getrennt. Ich brauche Folgendes:

ICR1 +
IRT1 +
LSR1 -
NME1 +
PWR1 -
Q0017 -
Q0020 -

Ich habe versucht, awk mit dem Feldtrennzeichen „+“ zu verwenden, aber dadurch wurde auch das „+“ aus der zweiten Spalte gelöscht …

Antwort1

Sie können den Feldtrenner von awk auf Leerzeichen oder setzen +und dann die klassische, auf assoziativen Arrays basierende Deduplizierung durchführen:

$ awk -F'[ \t+]' '!seen[$1]++' file
ICR1 +
IRT1 +
LSR1 -
NME1 +
PWR1 -
Q0017 -
Q0020 -

Antwort2

Vielleicht habe ich das Problem falsch verstanden, aber das scheint zu funktionieren:

grep -v '+.' file

Ausgabe:

ICR1 +
IRT1 +
LSR1 -
NME1 +
PWR1 -
Q0017 -
Q0020 -

Antwort3

Dasselbe habe ich mit seddem Befehl erreicht.

sed -n '/^.\{1,5\} .$/p' filename

Ausgabe

ICR1 +
IRT1 +
LSR1 -
NME1 +
PWR1 -
Q0017 -
Q0020 -

Antwort4

Verwenden vonMüller:

mlr --tsv --implicit-csv-header --headerless-csv-output \
    put -S '$1=gsub($1,"[+].+$","")' then uniq -a inputfile

und die Ausgabe ist:

ICR1    +
IRT1    +
LSR1    -
NME1    +
PWR1    -
Q0017   -
Q0020   -

verwandte Informationen