我正在尝试编写一个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*\" ")
}
问题是如何区分之前定义的system
get 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"*")
}
它有效! :) :)