我有以下数据文件。
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