用awk正则表达式

时间:2012-01-22 12:05:29

标签: bash 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 个答案:

答案 0 :(得分:-1)

忘记查找和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 / John / Jan.txt示例数据手动执行循环体的步骤,以确保字符串看起来正确。 / p>