データファイルをループしてディレクトリパスからファイル名を取得する必要があります

データファイルをループしてディレクトリパスからファイル名を取得する必要があります

以下のデータファイルがあります。

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

関連情報