首页 > 解决方案 > 在 shell 脚本中组合多个命令

问题描述

在一个 shell 脚本中组合多个命令。

我必须编写一个脚本,该脚本将递归扫描多个文件夹并从多个文件中 grep 应用程序名称,并获取带有计数的应用程序名称列表。我可以使用多个(3)命令来执行此操作。只是检查是否有更好的方法来执行它或组合这些命令。

命令 1:这将递归扫描 dir 并从每个包含应用程序名称的文件中获取行。

 grep --include=metadata.csv -rnw '.' -e "read :" > OUTPUT1.txt

输出看起来像这样(我正在寻找的应用程序名称是 MxMonitor_Marvel_PI49(第一行)和 alert_manager(第二行))

./subsearch_admin__admin_TXhNb25pdG9yX01hcnZlbF9QSTQ5__search14_1626351939.20757778_1626351940.4/metadata.csv:2:"read : [ admin ], write : [ admin ]",admin,"MxMonitor_Marvel_PI49",300 ./scheduler__nobody_YWxlcnRfbWFuYWdlcg__RMD5922da96313b0bb40_at_1626325500_98610/metadata.csv:2:"read : [ splunk -system-user ],写:[ splunk-system-user ]","splunk-system-user","alert_manager",86400 ./subsearch_admin__admin_TXhNb25pdG9yX01hcnZlbF9QSTQ5__search14_1626351939.20757778_1626351940.4/metadata.csv:2:"read] , 写: [管理员]",admin,"MxMonitor_Marvel_PI49",300

命令 2:这将从第一个命令的输出中提取 APP 名称

awk -F, '{gsub(/^"|"$/,"",$(NF-1));print $(NF-1)}' OUTPUT1.txt > OUTPUT2.txt

输出 MxMonitor_Marvel_PI49 alert_manager MxMonitor_Marvel_PI49

命令 3:获取每种应用类型的计数

awk '{mm=$1; cnt[$1 " " mm]++} END{for(a in cnt) print a " " cnt[a]}' OUTPUT2.txt > OUTPUT3.txt

这些命令工作正常。我正在检查我们是否可以组合这些命令。我尝试使用 xargs 但没有运气。

For ex. grep --include=metadata.csv -rnw '.' -e "read :" | xargs -t awk -F, '{gsub(/^"|"$/,"",$(NF-1));print $(NF-1)}'

谢谢

标签: shellsh

解决方案


推荐阅读