2016-10-01 3 views
2

Ich habe zwei DateienErste Werte in einer Datei, die in einer anderen Datei nicht vorhanden ist

File1.txt:

docker/registry:2.4.2 
docker/rethinkdb:latest 
docker/swarm:1.0.0 

Datei2.txt:

docker/registry:2.4.1 
docker/rethinkdb:1.0.0 
docker/swarm:1.0.0 

Die Ausgabe sollte sein:

docker/registry:2.4.2 
docker/rethinkdb:latest 

Mit anderen Worten, e Eine Zeile in Datei1, die nicht in Datei2 vorhanden ist, sollte Teil der Ausgabe sein.

Ich habe versucht, Folgendes zu tun, aber es funktioniert nicht.

diff File1.txt File2.txt 
+0

Sie sollten alle Zeilen herausfiltern, die nicht mit "-" beginnen. Pfeifen Sie in 'grep '^ \ -', um alle benötigten Zeilen mit einem Minuszeichen voranzukommen. Dann denke ich, du könntest 'sed'/^ - // 'machen, um diese Anfangszeile zu entfernen. (Dies ist, bis ich ein besseres sed-Muster finde) –

Antwort

1

Mit awk können Sie tun:

awk 'NR==FNR{a[$0];next}!($0 in a)' file2 file1 
1

Mit comm:

comm -23 <(sort File1.txt) <(sort File2.txt) 
2

Sie nur grep dafür verwenden könnte:

$ grep -v -f file2.txt file1.txt 
docker/registry:2.4.2 
docker/rethinkdb:latest 

Wenn es gibt viele Reihen im Fil Ich würde wahrscheinlich @ user000001 Lösung verwenden.

+1

Beachten Sie auch, dass Sie '-F' verwenden sollten, um zu vermeiden, dass jede Zeile in' file2.txt' als regulärer Ausdruck behandelt wird. – andlrc

Verwandte Themen