Sie müssen den Dateinamen aus dem Verzeichnispfad erfassen, indem Sie die Datendatei in einer Schleife durchlaufen

Sie müssen den Dateinamen aus dem Verzeichnispfad erfassen, indem Sie die Datendatei in einer Schleife durchlaufen

Ich habe die folgende Datendatei.

recID#  Attachment#            Attachment#2.          ...... Attachment #15 
101      c:/a/b/c/d/fil1.txt    c:/a/b/c/d/e/aaa.txt   ...... c:/a/b/c/d/e/fff.txt        
103      c:/a/b/c/d/abc.txt     c:/a/b/c/d/e/bbb.txt   ...... c:/a/b/c/d/e/ggg.txt   
104      c:/a/b/c/d/e/efg.txt   c:/a/b/c/d/e/ccc.txt   ...... c:/a/b/c/d/e/hhh.txt   
105      c:/a/b/c/mnop.txt      c:/a/b/c/d/e/ddd.txt   ...... c:/a/b/c/d/e/iii.txt 

Ich möchte nur den Dateinamen erfassen, nicht das gesamte Verzeichnis. Unten sehen Sie die erwartete Ausgabe.

rec ID#  Attachment1#         ttachment#2 ...... Attachment #15
101         fil1.txt            aaa.txt     ...... fff.txt      
103         abc.txt             bbb.txt     ...... ggg.txt  
104         efg.txt             ccc.txt     ...... hhh.txt  
105         mnop.txt            ddd.txt     ...... iii.txt  

Außerdem möchte ich jede Datei im lokalen Verzeichnis c:\a\b\c vergleichen, ob sie verfügbar ist oder nicht. Wenn sie verfügbar ist, möchte ich das Verzeichnis /Test erstellen und alle Dateien verschieben, die in diesem Verzeichnis verfügbar sind.

z. B.: Spalte „Anhang1“, der Dateiname „fil1.txt“, wenn er in diesem Verzeichnis „c:\a\b\c“ verfügbar ist, dann möchte ich die Datei aus dem Verzeichnis „c:\a\b\c“ nach „c:\a\b\d“ kopieren.

Danke

Antwort1

Um den Verzeichnisteil aus allen Dateinamen zu entfernen, können Sie verwenden

sed 's#[^ \t]*/##g' inputfile > outputfile

oder

awk '{gsub(/[^ \t]*\//,"",$0);print}' inputfile > outputfile

Aus der Beispiel-Eingabedatei in der Frage erhalte ich diese Ausgabe

recID#  Attachment#            Attachment#2.          ...... Attachment #15 
101      fil1.txt    aaa.txt   ...... fff.txt        
103      abc.txt     bbb.txt   ...... ggg.txt   
104      efg.txt   ccc.txt   ...... hhh.txt   
105      mnop.txt      ddd.txt   ...... iii.txt 

Wenn die Formatierung der Ausgabe wichtig ist, geben Sie in der Frage bitte an, welche Anforderungen Sie haben.

Da aus der Frage nicht klar hervorgeht, in welcher Beziehung die Verzeichnisse, in denen nach Dateien gesucht werden soll bzw. aus denen/in die Dateien verschoben werden sollen, zur Eingabedatei stehen, kann ich den anderen Teil der Frage nicht beantworten.

Bearbeiten:

Falls die tatsächliche Eingabe Backslashes ( \) statt Schrägstrichen ( /) enthält, verwenden die folgenden geänderten Befehle [/\\]anstelle von /oder , \/damit sie mit beiden Eingabevarianten funktionieren:

sed 's#[^ \t]*[/\\]##g' inputfile > outputfile
awk '{gsub(/[^ \t]*[/\\]/,"",$0);print}' inputfile > outputfile

verwandte Informationen