我使用以下内容仅搜索文件的第一行以获取报告名称。它正在搜索整个文件。我以为NR == 1只会搜索第一行。我想我的语法很糟糕。
find /SYM/SYM000/REPORT/ -type f -mmin -480 \
-name '[0-9][0-9][0-9][0-9][0-9][0-9]' \
-exec awk '/My Report Title/,NR==1 {print FILENAME; exit}' {} \;
感谢任何帮助。
我只想返回文件名。它使用6位数作为文件名掩码查找过去8小时。
答案 0 :(得分:3)
hek2gml's answer包含关键指针 - 您必须使用&&
进行逻辑AND 而不是范围 - 但命令可以更多在两个方面有效:
awk
来电,通过-exec
主要+
来终止,而不是\;
find /SYM/SYM000/REPORT/ -type f -mmin -480 \
-name '[0-9][0-9][0-9][0-9][0-9][0-9]' \
-exec awk '/My Report Title/ { print FILENAME } { nextfile }' {} +
此命令只查看每个输入文件的第1行。
nextfile
不是严格符合POSIX的,所以如果你的awk
没有它(GNU Awk,Mawk和BSD / OSX Awk做 - 不确定AIX),请使用(少)高效,因为它必须读取每个文件的所有行):
find /SYM/SYM000/REPORT/ -type f -mmin -480 \
-name '[0-9][0-9][0-9][0-9][0-9][0-9]' \
-exec awk 'FNR == 1 && /My Report Title/ { print FILENAME }' {} +
如果在没有nextfile
的情况下,您宁愿为每个文件(awk
终结者-exec
)拨打\;
一次,与在原始解决方案尝试中一样(仅读取每个文件的第一行,但为每个文件调用awk
一次):
find /SYM/SYM000/REPORT/ -type f -mmin -480 \
-name '[0-9][0-9][0-9][0-9][0-9][0-9]' \
-exec awk '/My Report Title/ { print FILENAME } { exit }' \;
答案 1 :(得分:2)
您似乎认为/My Report Title/,NR==1
是一种由,
分隔的条件列表。这个假设是错误的。
在这种情况下,正确的是使用逻辑AND 运算符&&
来连接条件:
find /SYM/SYM000/REPORT/ -type f -mmin -480 \
-name '[0-9][0-9][0-9][0-9][0-9][0-9]' \
-exec awk '/My Report Title/ && NR==1 {print FILENAME; exit}' {} \;