以下のデータファイルがあります。
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