2011-12-29 9 views
1

ファイルを1行ずつ(ヘッダーを無視して)調べ、各行の先頭からファイル名を抽出してからファイルを検索するbashスクリプトを作成しようとしています。この名前を1つのディレクトリに格納し、別のディレクトリに移動します。これらのファイルを何百回も処理し、100万個以上のファイルを移動します。ファイルのサンプルは次のとおりです。BASHシェルスクリプトファイルの解析[newbie]

ImageFileName Left_Edge_Longitude Right_Edge_Longitude Top_Edge_Latitude Bottom_Edge_Latitude 

21088_82092.jpg: -122.08007812500000 -122.07733154296875 41.33763821961143 41.33557596965434 

21088_82093.jpg: -122.08007812500000 -122.07733154296875 41.33970040427444 41.33763821961143 

21088_82094.jpg: -122.08007812500000 -122.07733154296875 41.34176252364274 41.33970040427444 

私は最初の行を無視して、変数として21088_82092.jpgつかむしたいと思います。ファイル名の長さは必ずしも同じではありませんが、常にdigitits_digits.jpgの形式になります。

効率的なアプローチのための助けがあれば幸いです。

+0

投稿を編集して、これまでに試したことを表示し、エラー出力を含めてください。このような質問には実質的に毎週尋ねられるので、ここで検索してみてください。がんばろう。 – shellter

答えて

0

これは、あなたが始める必要があります。

$ tail -n +2 input | cut -f 1 -d: | while read file; do test -f $dir/$file && mv -v $dir/$file $destination; done 
+0

これは素晴らしい、私のニーズに完全に動作します。 – user1120422

0

あなたは、このような何かを、単純にスクリプトを実行するスクリプトを作成することができます。次のコマンドを使用すると、ある場所から別の場所へファイルをコピーするスクリプトを与えるだろうが、あなたは、単にawk出力を変化させることにより、スクリプト生成をより複雑にすることができます

pax:~$ cat qq.in 
ImageFileName  Left_Edge_Longitude Right_Edge_Longitude 
21088_82092.jpg: -122.08007812500000 -122.07733154296875 
21088_82093.jpg: -122.08007812500000 -122.07733154296875 
21088_82094.jpg: -122.08007812500000 -122.07733154296875 

pax:~$ awk -F: '/^[0-9]+_[0-9]+.jpg:/ { 
     printf "cp /srcdir/%s /dstdir\n",$1 
    } {}' qq.in 

cp /srcdir/21088_82092.jpg /dstdir 
cp /srcdir/21088_82093.jpg /dstdir 
cp /srcdir/21088_82094.jpg /dstdir 

あなたは、そのスクリプトの出力をキャプチャ(最後の3行)を別のファイルにコピーすると、そのファイルは実際のコピーを行うためのスクリプトになります。

+0

あるいは、スクリプトが 'sh'にパイプされたら、それはあなたがしたいことをやると確信しています。 –

+0

コロンで分割するには 'awk -F:'を使い、必要なファイル名は '$ 1'です。 –

+0

ニース、ジョナサン、スーツに合わせて編集。 – paxdiablo

関連する問題