Eu tenho o seguinte arquivo de dados.
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
Quero capturar apenas o nome do arquivo e não o diretório inteiro. produção abaixo do esperado.
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
Também quero comparar cada arquivo no diretório local c:\a\b\c disponível ou não. se disponível, quero criar o diretório /Test e mover todos os arquivos disponíveis nesse diretório.
por exemplo: coluna Attachment1 o nome do arquivo fil1.txt, se estiver disponível neste diretório "c:\a\b\c" então quero copiar o arquivo do diretório "c:\a\b\c" para " c:\a\b\d".
Obrigado
Responder1
Para remover a parte do diretório de todos os nomes de arquivos que você pode usar
sed 's#[^ \t]*/##g' inputfile > outputfile
ou
awk '{gsub(/[^ \t]*\//,"",$0);print}' inputfile > outputfile
Do arquivo de entrada de amostra na pergunta, recebo esta saída
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
Se a formatação da saída for importante, especifique na pergunta quais requisitos você possui.
Como não está claro na pergunta como os diretórios onde verificar os arquivos ou para onde mover os arquivos estão relacionados ao arquivo de entrada, não posso responder à outra parte da pergunta.
Editar:
Caso a entrada real contenha barras invertidas ( \
) em vez de barras ( /
), os seguintes comandos modificados são usados [/\\]
em vez de /
ou \/
para fazê-los funcionar com ambas as variantes de entrada:
sed 's#[^ \t]*[/\\]##g' inputfile > outputfile
awk '{gsub(/[^ \t]*[/\\]/,"",$0);print}' inputfile > outputfile