2012-01-22 90 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;编写一个简单的shell脚本。

既然你有一个固定的多级层次结构,可以匹配与glob模式:

对于每一个文件,你可以做一些基本的路径名操作产生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例如数据,以确保琴弦的循环体的步骤看起来不错。