我有以下數據文件。
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