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
jetzt gibt es '1234567890IDNUMBER1 1234567890IDNUMBER2' so Number4 – ilovkatie
@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
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