【问题标题】:regular expression with awk带有 awk 的正则表达式
【发布时间】:2012-03-06 06:46:13
【问题描述】:

我在下面管理时间日志。

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)}'

这个脚本不聪明!有什么好的聪明方法吗?

【问题讨论】:

  • 您是否希望为每个员工制作一个总文件,即所有可用月份的总小时数?祝你好运。
  • 我不清楚您在寻找什么。可以用mkdir total; cp -r */*/*/* -t total吗?

标签: bash awk


【解决方案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/John/Jan.txt 示例数据手动执行了循环主体的步骤,以确保字符串看起来正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多