awk 脚本列出具有指定文件名的文件

awk 脚本列出具有指定文件名的文件

我正在尝试编写一个awk以字符串作为模式的脚本,并希望列出目录中名称中包含此模式的所有文件。但我不知道如何告诉我的awk函数读取目录中的所有文件名(find在这种情况下命令对我没有帮助)。我的输入模式是日期格式YYYYMMDD,我的文件以YYYY-MM-DD.

这就是我试图在我的.awk文件中执行的操作:

#! /usr/bin/awk -f

BEGIN{
Directory="history/"

date="20180522"

validDate=substr(date,0,4)"-"substr(date,5,2)"-"substr(date,7,2)
printf Directory
system("find $Directory -maxdepth 1 -type f -name \"validDate*\" ") 
}

问题是如何区分之前定义的systemget write 值。$Directory$validDate

答案1

您似乎想使用awk以格式从用户那里获取日期YYYYMMDD,然后将其转换为YYYY-MM-DD进行文件搜索的格式。

awk比交互式编程更适合流解析。它也不知道如何遍历文件层次结构。

下面是一个建议,它使用 shell 脚本从用户读取数据,并用于find查找文件:

#!/bin/sh

thedate="$1"

if [ -z "$thedate" ]; then
    printf 'Enter year (YYYY): ' >&2
    read theyear
    printf 'Enter month  (MM): ' >&2
    read themonth
    printf 'Enter day    (DD): ' >&2
    read theday

    thedate="$theyear-$themonth-$theday"
fi

find /path/to/history -type f -name "*$thedate*"

该脚本可以使用或不使用命令行参数来运行。如果脚本检测到它与命令行参数一起使用,它将假定它是正确格式的日期字符串,并按原样使用它来查找文件。

答案2

您可以find通过以下三种方式之一使用:

从目录本身内部history

find . -maxdepth 1 -type f -name \*pattern\*

从上面包含该history目录的目录

find . -maxdepth 1 -type f -name \*pattern\*

从任何地方:

find /path/to/history -maxdepth 1 -type f -name \*pattern\*

您可以将输入find作为您要查找的模式传递给命令。

答案3

经过大量搜索和朋友的帮助,我找到了解决方案。作为一位朋友帮助我纠正了评论中的错误,我发布了此内容,以便其他人可以使用它。作为阿马丹说:

您不能("....$Directory...")awk.使用字符串连接: system("find " Directory " -maxdepth 1 -type f -name \"validDate*\" ")

所以我用以下内容更新了我的脚本:

#! /usr/bin/awk -f

BEGIN{
Directory="history/"

date="20180522"

validDate=substr(date,0,4)"-"substr(date,5,2)"-"substr(date,7,2)
printf Directory
system("find " $Directory " -maxdepth 1 -type f -name " validDate"*") 
}

它有效! :) :)

相关内容