首页 > 解决方案 > 仅在找到时打印文件名

问题描述

所以我有一个命令可以打印主机(如果找到)。

awk -v IGNORECASE=1 -v m="$host" '$2~m {p=1} NF>2 && $2!~m {p=0} p' ${TEMP}/*

这就是它的结果

33 VMME87      VMware        51402EC000CF2732 3:0:2
                             51402EC000CF2730 3:0:1
                             51402EC000CF2730 2:0:1
                             51402EC000CF2732 2:0:2
83 VMME87          VMware        51402EC000CF2732 1:2:4
                                 51402EC000CF2730 1:2:3
                                 51402EC000CF2730 0:2:3
                                 51402EC000CF2732 0:2:4

但是,是否也可以将文件名打印到找到它的位置?

大概是这样的:

**Name of the file**
33 VMME87      VMware        51402EC000CF2732 3:0:2
                             51402EC000CF2730 3:0:1
                             51402EC000CF2730 2:0:1
                             51402EC000CF2732 2:0:2
echo (space)

**Name of the file**    
83 VMME87          VMware        51402EC000CF2732 1:2:4
                                 51402EC000CF2730 1:2:3
                                 51402EC000CF2730 0:2:3
                                 51402EC000CF2732 0:2:4

如果我使用 a grep,它会打印文件名,但不会打印所有最后一列。

Name of the file 33 VMME87      VMware        51402EC000CF2732 3:0:2

标签: bashshellunixscripting

解决方案


当前文件名在FILENAME变量中可用。改变这部分

{p=1}

{p=1; print FILENAME}

如果您只想要没有路径的文件名,请使用:

{p=1;sub(/^.*\//,"",FILENAME);print FILENAME}

推荐阅读