2017-07-02 2 views
0

Ich habe zwei Textdateien, die ich irgendwie kombinieren möchte, aber basierend auf dem zweiten Feld in der ersten Datei ersetzen. Unten ist das Format der ersten Datei. Welches sind Wörter mit ihrer Zählung aus einem Korpus.Kombinieren von zwei Textdateien basierend auf dem zweiten Feld in der ersten Textdatei nur wenn auch in der zweiten Textdatei

file_1.txt

1000 the 
999 been 
950 phone 
850 ball 
800 watch 
799 porch 

Datei 2 ist, einige der Worte, die in der ersten Datei gefunden werden können, sondern einen Zusammenbruch des Wortes aus dem zweiten Feld auf.

file_2.txt

the th e 
been be en 
shirt sh ir t 
phone pho ne 
desk d esk 
chair cha i r 
watch wa t c h 
floor f loo r 

Was ich unter möchte bekommen. Wenn das Wort/die Wörter in beiden Dateien vorhanden sind, möchte ich nur das Wort von der zweiten Datei abbrechen.

file_3.txt

1000 th e 
999 be en 
950 pho ne 
850 ball 
800 wa t c h 
799 porch 

Ich habe einige sort Sachen zwischen den beiden Dateien auf den Feldern, aber ich bin ziemlich verloren Basis zu tun versucht.

+0

Mit 'join',' sort', 'sed',' awk' mit und 'bash':' join -t _ -1 2 -2 1 -a 1 <(sed 's// _ /' file_1.txt | sort -t _ -k 2,2) <(sed 's// _ /' datei_2.txt | sort -t _ -k 1,1) -o 1,1,1,2,2,2 | sed 's/_ $ //' | awk -F {'print $ 1, $ NF}' | sortieren -nr – Cyrus

Antwort

0

Sie könnten Awk verwenden:

awk 'FNR == NR { m[$2]=$1 } FNR != NR && $1 in m { w=$1; $1=""; print m[w] $0}' file_1.txt file_2.txt 

Das heißt:

  • Für jede Zeile in der ersten Datei, bauen eine Karte von word -> id
  • Für jede Zeile in der zweiten Datei:
    • Speichern Sie das erste Feld (das Wort) in einer Variablen
    • Klar das erste Feld
    • Drucken Sie die ID der Karte und das Wort, und den Rest der Linie
Verwandte Themen