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