需要透過循環資料檔案從目錄路徑捕獲檔案名

需要透過循環資料檔案從目錄路徑捕獲檔案名

我有以下數據文件。

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

相關內容