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