使用 shell 脚本,我在数据库虚拟机上进行数据库调用,并获取查询响应并将其存储到 .txt 文件中。如下所示:
X folder Check:
Number of Files on X Outbound
17
Y folder Check:
Number of Files on Y Outbound
17
Z folder Check:
Number of Files on Z Outbound
18
现在对于 X、Y 和 Z 中的每一个。我基本上在各自的位置接收文件(计数)。所以我期望为每个 X、Y 和 Z 获得“18”个文件。现在使用 shell,我希望能够知道/存储我没有收到 18 个文件的文件夹。
示例:在上述情况下,我应该发现缺少 X 和 Y 文件夹的文件。
答案1
sed -n 'N;N;/\n18$/!s/ folder Check:\n.*\n/ /p'
该文本将输出:
X 17
Y 17
-n
告诉sed
默认情况下不打印模式空间(我们只使用p
命令的标志打印我们想要的模式空间s
)N;N
:我们将接下来的两行拉入模式空间,我们在 3 行模式空间中一次处理 3 行。/\n18/!
:如果模式空间不是 (!
) 结束$
于 ( )<newline>18
s/folder Check:\n.*\n//p
:删除文件夹名称和计数之间的部分并p
打印。您还可以仅保留文件夹名称 (s/ folder Check:\n.*//p
),或转储完整的三行 (p
),具体取决于您想要的内容。
awk
与:相同
awk '{sub(/ folder Check:$/, ""); folder = $0; getline; getline; count = $0}
count != 18 {print folder, count}'
答案2
$ awk '{n=(NR%3)} n==1{folder=$1} (n==0) && ($0!=18){print folder, $0}' file
X 17
Y 17