2017-07-24 1 views
0

file1.txt:Filter-Datei mit einer Liste aus einer anderen Datei, basierend auf Teilzeichenfolge

1234567890IDNUMBER1 
1234567890IDNUMBER2 
1234567890IDNUMBER3 
1234567890IDNUMBER4 
1234567890IDNUMBER5 

Hinweis: IDNUMBERX ist eine feste Länge eindeutige ID. In diesem speziellen Fall ist es 9 Zeichen lang sein und es IMMER an Position 11.

file2.txt starten:

IDNUMBER1 
IDNUMBER2 
IDNUMBER4 

Hinweis: Liste der IDs.

Was ich tun möchte, ist die erste Datei zu filtern, um alle Zeilen mit IDs zu löschen, die nicht in der zweiten Datei aufgeführt sind.

Erwartete Ausgabe:

1234567890IDNUMBER1 
1234567890IDNUMBER2 
1234567890IDNUMBER4 

fand ich sehr ähnliche Frage hier: grep matching specific position in lines using words from other file

ich es deutliche Antwort versucht, und es ist für mich nicht funktioniert wie Autor beschreiben:

awk 'NR==FNR{a[$0]=1;next;} substr($0,11,9) in a' file2.txt file1.txt 

gibt mir nur eine Zeile zurück (letzte Übereinstimmung):

1234567890IDNUMBER4 

das gleiche für die Daten von verknüpften Frage.

Was kann falsch sein?

Verwendung: GNU Awk 4.1.4 API: 1.1 (Mpfr 3.1.5-p2, GNU MP 6.1.2)

EDIT

Dumm mich ... Es war alles über Zeilenende auf Windows ... Windows Carriage Return-Zeichen verursachte das Problem.

I verwendet:

awk '{ sub("\r$", ""); print }' dos.txt > unix.txt 

Datei zu konvertieren Wagenrücklauf zu entfernen. Source

Antwort

1

Versuch:

awk 'FNR==NR{a[substr($0,11)]=$0;next} ($1 in a){print a[$1]}' File1.txt File2.txt 
1234567890IDNUMBER1 
1234567890IDNUMBER2 
1234567890IDNUMBER4 

EDIT: Hinzufügen einer weiteren Lösung auf gleiche jetzt auch.

awk 'FNR==NR{a[$2]=$0;next} ($1 in a){print a[$1]}' FIELDWIDTHS="10 9" File1.txt File2.txt 
+0

jetzt gibt es '1234567890IDNUMBER1 1234567890IDNUMBER2' so Number4 – ilovkatie

+0

@ilovkatie fehlt: Das ist für mich erfolgreich gearbeitet, Sie auch zu meinem bearbeiten Befehl überprüfen konnte. Das verwendet die FIELDWIDTHS-Funktion von gawk. – RavinderSingh13

+1

Auch habe ich die Ausgabe meines ersten Befehls hinzugefügt, der nur korrekt aussieht, lassen Sie mich auf dem gleichen wissen. Stellen Sie außerdem sicher, dass Sie KEINE Wagenzeichen in Ihren Input_files haben. – RavinderSingh13

Verwandte Themen