使用AWK检查文件名是否符合给定格式

时间:2019-02-26 13:31:26

标签: awk

是否可以使用AWK中的程序检查文件名。所以我需要代码检查同一目录中的2个文件是否符合这种命名格式

nppcase _ *** _ ****** 标题 **************。csv

这将失败nppcaadese _ *** _ ****** bvdhistack **************。csv

这将通过nppcase_lpc_abc123_header_anychara.csv

所以也要弄清楚*是任何字符,其余都是文字。

如果测试失败,则程序应输出一条打印语句,然后退出程序。

3 个答案:

答案 0 :(得分:0)

好吧,由于我不清楚您的命名格式,我将使用更简单的正则表达式来精确匹配三个字符,例如foobar

$ awk 'BEGIN{for(i=1;i<ARGC;i++)if(ARGV[i]!~/^...$/){print "statement";exit}}' foo file
statement

解释:

$ awk '
BEGIN {
    for(i=1;i<ARGC;i++)          # loop filenames given as parameters
        if(ARGV[i]!~/^...$/) {   # if filename does not match regex ...
            print "statement"    # print statement
            exit 1               # and exit with a non-zero value
    }
    exit                         # exit anyway
}' foo file                      # files you want to check

答案 1 :(得分:0)

您可以简单地使用ls并将其通过管道用正则表达式在命令行上awk。这样的事情会起作用。您将需要使用“。” (正则表达式通配符)字符而不是“ *”。您还可以转义最后一个“。”因为您想要一个字面量而不是通配符。

ls | awk '{if ($1 ~ /nppcase_..._......header..............\.csv/) { print $0 " matches the format" } else { print $0 " does not match!"}}'

答案 2 :(得分:0)

尽管James先生说您的文件格式不明确,但请您尝试遵循该命令。(仅基于您的问题)。

awk 'FILENAME!~/nppcase_*_.*header.*\.csv/{print "Seems " FILENAME " is NOT following pattern so exiting now...";exit} 1' nppcase_***_******header**************.csv  nppcase_***_******header12131**************.csv

上述代码的逻辑很简单,如果匹配正则表达式,它将继续打印Input_file的内容;否则,它将在屏幕上打印一条消息并退出awk程序。

相关问题