是否可以使用AWK中的程序检查文件名。所以我需要代码检查同一目录中的2个文件是否符合这种命名格式
nppcase _ *** _ ****** 标题 **************。csv
这将失败nppcaadese _ *** _ ****** bvdhistack **************。csv
这将通过nppcase_lpc_abc123_header_anychara.csv
所以也要弄清楚*是任何字符,其余都是文字。
如果测试失败,则程序应输出一条打印语句,然后退出程序。
答案 0 :(得分:0)
好吧,由于我不清楚您的命名格式,我将使用更简单的正则表达式来精确匹配三个字符,例如foo
和bar
:
$ 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
程序。