似乎无法只搜索第一行文字
Can't seem to search just first line of text
我使用以下命令仅在文件的第一行搜索报告名称。它正在搜索整个文件。我以为 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}' {} \;
感谢任何帮助。
我只想return文件名。它以 6 位数字作为文件名掩码查找过去八小时。
您似乎假设 /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}' {} \;
包含关键指针 - 您 必须使用 &&
进行逻辑 AND 而不是 range - 但命令可以在两个方面提高效率:
- 给定输入文件的短路处理,以便处理在第一行之后停止。
- 传递(通常)所有文件到单个
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 }' {} +
此命令只查看每个输入文件的第一行。
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 }' \;
我使用以下命令仅在文件的第一行搜索报告名称。它正在搜索整个文件。我以为 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}' {} \;
感谢任何帮助。
我只想return文件名。它以 6 位数字作为文件名掩码查找过去八小时。
您似乎假设 /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}' {} \;
&&
进行逻辑 AND 而不是 range - 但命令可以在两个方面提高效率:
- 给定输入文件的短路处理,以便处理在第一行之后停止。
- 传递(通常)所有文件到单个
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 }' {} +
此命令只查看每个输入文件的第一行。
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 }' \;