根据条件获取特定文本的Shell方式

根据条件获取特定文本的Shell方式

使用 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

相关内容