Ich habe file1:bash, um Informationen aus zwei Dateien
NM_000014 A2M
NM_000015 NAT2
NM_000016 ACADM
NM_000017 ACADS
NM_000018 ACADVL
NM_000019 ACAT1
NM_000020 ACVRL1
NM_000021 PSEN1
NM_000022 ADA
Und file2:
NM_000019
NM_000020
NM_000020
NM_12345
Ich brauche Informationen von meinem file1 zu bekommen und es setzen Datei2 - so file3 erstellen:
NM_000019 ACAT1
NM_000020 ACVRL1
NM_000020 ACVRL1
NM_12345 NO
Hinweis - Ich kann eine ursprüngliche Sortierreihenfolge nicht ändern (also nicht comm und diff verwenden). Ich habe doppelte Zeile in file2 - das muss ich behalten (wc -l file2 == wc -l file3). Wenn es keine Übereinstimmung gibt - drucken NO
Ich habe etwa 70K Reihen und ich brauche keine schnellste Lösung. Mein Code ist in der Lage, die gleichen Ergebnisse zu vergleichen und zu drucken.
Code:
#!/bin/bash
while read -r c; do
grep $c file1 | uniq
done <file2> file3
Der Vollständigkeit halber könnten Sie 'awk -v OFS =" \ t "'#my awk code ....' file1 file2' hinzufügen, um Felder durch Tabulatoren getrennt zu machen – Aserre
@Aserre Danke, habe die Registerkarten nicht erwähnt, also habe ich das übersprungen . –
@JamesBrown Vielen Dank für die perfekte awk Lösung .. sehr interessiert ist, dass in Ihrer Lösung Bedingung gilt wc -l file2 == wc -l file3 !! – Geroge