2012-01-22 8 views
0

以下の時間ログを管理しています。awkによる正規表現

Section/TeamName/age/NAME/[Jan/Feb/Mar....etc].txt 

例:

EngineeringDepartment/TeamA/25-30/John/Jan.txt 

しかし、私は、各従業員のタイムログをピックアップします。

例:

cp EngineeringDepartment/TeamA/25-30/John/Jan.txt ./total/John/Jan.txt 

私は以下の小さなスクリプトを書きました。

#!/bin/bash 
find . -name "*.txt" | awk -v FS="/" '{system("mkdir -p ./total/" $5)}' 
find . -name total -prune -o -type f -name "*.txt" -print | awk -v FS="/" '{src = $1 "/" $2 "/" $3 "/" $4 "/" $5 "/" $6; dst = "./total/" $5; system("cp " src " " dst)}' 

このスクリプトはスマートではありません。任意の良いスマートな方法?

+1

あなたは、各従業員の合計ファイルを作成しようとしていますか?利用可能なすべての月の合計時間です。がんばろう。 – shellter

+1

私はあなたが探しているものが明確ではない。 'mkdir totalを使用できますか? cp -r */*/*/* -t total'? – Kevin

答えて

-1

findとawkは忘れてください。シンプルなシェルスクリプトを書いてください。

あなたは、固定マルチレベルの階層を持っているので、あなたはグロブパターンとそれと一致することができます。各ファイルについて

、あなたは、cpコマンドを生成するためにいくつかの基本的なパス名の操作を行うことができます。

mkdir total         # Example data: 
for file in */*/*/*/*.txt ; do    # EngDept/TeamA/25-30/John/Jan.txt 
    sec_team_age=$(dirname $(dirname "$file")) # EngDept/TeamA/25-30 
    name_month=${file#"$sec_team_age/"}  # John/Jan.txt 
    mkdir -p $(dirname total/$name_month)  # mkdir -p total/John 
    cp $file total/$name_month     # cp $file total/John/Jan.txt 
done 

私はこれをテストするために、あなたのデータを持っていなかったが、私は手動で確認文字列を作るためにEngDept/TeamA/25-30 /ジョン/ Jan.txtの例のデータを使用してループ本体のステップを実行しました右に見えた。