データファイルを繰り返して、ディレクトリパスからファイル名をキャプチャする必要があります。

データファイルを繰り返して、ディレクトリパスからファイル名をキャプチャする必要があります。

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

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 

出力形式が重要な場合は、質問に要件を指定してください。

ファイルの場所の確認やファイルの移動が入力ファイルとどのように関連しているかは質問で明確ではないため、質問の他の部分に答えることはできません。

編集する:

実際の入力にスラッシュ( )の\代わりにバックスラッシュ(/)が含まれている場合、次の修正コマンドは[/\\]代わりに/ORを使用して\/両方の入力バリアントに対して機能します。

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

おすすめ記事