Tengo el siguiente archivo de datos.
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
Quiero capturar sólo el nombre del archivo, no todo el directorio. por debajo de la producción esperada.
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
También quiero comparar cada archivo en el directorio local c:\a\b\c disponible o no. Si está disponible, quiero crear el directorio /Test y mover todos los archivos que están disponibles en ese directorio.
por ejemplo: columna Adjunto1, el nombre del archivo fil1.txt, si está disponible en este directorio "c:\a\b\c", entonces quiero copiar el archivo del directorio "c:\a\b\c" a " c:\a\b\d".
Gracias
Respuesta1
Para eliminar la parte del directorio de todos los nombres de archivos que podría usar
sed 's#[^ \t]*/##g' inputfile > outputfile
o
awk '{gsub(/[^ \t]*\//,"",$0);print}' inputfile > outputfile
Del archivo de entrada de muestra en la pregunta obtengo este resultado
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
Si el formato del resultado es importante, especifique en la pregunta qué requisitos tiene.
Como no queda claro en la pregunta cómo los directorios donde buscar archivos o hacia dónde mover archivos están relacionados con el archivo de entrada, no puedo responder la otra parte de la pregunta.
Editar:
En caso de que la entrada real contenga barras invertidas ( \
) en lugar de barras diagonales ( /
), se utilizan los siguientes comandos modificados [/\\]
en lugar de /
o \/
para que funcionen con ambas variantes de entrada:
sed 's#[^ \t]*[/\\]##g' inputfile > outputfile
awk '{gsub(/[^ \t]*[/\\]/,"",$0);print}' inputfile > outputfile