需要通过循环数据文件从目录路径捕获文件名

需要通过循环数据文件从目录路径捕获文件名

我有以下数据文件。

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 

我只想捕获文件名而不是整个目录。低于预期产量。

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  

另外我想比较本地目录 c:\a\b\c 中的每个文件是否可用。如果可用,我想创建 /Test 目录并移动该目录中可用的所有文件。

例如: Attachment1 列文件名 fil1.txt,如果它在此目录“c:\a\b\c”中可用,那么我想将该文件从目录“c:\a\b\c”复制到“ c:\a\b\d”。

谢谢

答案1

要从所有文件名中删除目录部分,您可以使用

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

或者

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

从问题中的示例输入文件中我得到这个输出

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 

如果输出的格式很重要,请在问题中指定您的要求。

由于问题中不清楚检查文件的位置或移动文件的位置与输入文件之间的关系,因此我无法回答问题的另一部分。

编辑:

如果实际输入包含反斜杠 ( \) 而不是正斜杠 ( /),则以下修改后的命令使用[/\\]代替/\/以使它们适用于两种输入变体:

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

相关内容