我有一大组线程转储,它们位于目录树中(每 30 分钟一个文件夹)。
我正在尝试计算单个文件中有多少个线程。到目前为止,我想出了:
find . -name 'high-cpu-tdump.out' -exec grep -H "Thread-" {} \;
这返回:
./cbsmtjfuprd2/2021.10.22-06.30/high-cpu-tdump.out:"Thread-0 (HornetQ-server-HornetQServerImpl::serverUUID=7582b137-83b1-11e9-bc0d-b5863efb47a2-961209098)" #123 prio=5 os_prio=0 tid=0x00007f01a45be000 nid=0x4a4 waiting on condition [0x00007f010b730000]
./cbsmtjfuprd2/2021.10.22-06.30/high-cpu-tdump.out:"Thread-1 (HornetQ-scheduled-threads-2107959528)" #121 prio=5 os_prio=0 tid=0x00007f01c01ff800 nid=0x4a2 waiting on condition [0x00007f0130897000]
./cbsmtjfuprd2/2021.10.22-06.30/high-cpu-tdump.out:"Thread-0 (HornetQ-Asynchronous-Persistent-Writes221963927-1847608919)" #120 daemon prio=5 os_prio=0 tid=0x00007f01a4527000 nid=0x49a waiting on condition [0x00007f0131487000]
./cbsmtjfuprd2/2021.10.22-06.30/high-cpu-tdump.out:"Thread-0 (HornetQ-scheduled-threads-2107959528)" #116 prio=5 os_prio=0 tid=0x00007f01a4377800 nid=0x490 waiting on condition [0x00007f0131ce4000]
. . . . . .
这是一个好的开始,但是我需要用“wc -l”链接它,以便我知道每个文件有多少线程。我正在做一些尝试,但都失败了:
find . -name 'high-cpu-tdump.out' -exec grep -H "Thread-" {} | wc -l \;
find: missing argument to `-exec'
您是否知道 find 是否可行,或者我是否必须编写一个脚本来逐个检查每个单个文件的目录?
如果不使用ie的显式 shell 调用,您将无法通过管道
wc -l
传递到grep
命令-exec
sh -c
但是运行它不会产生文件名,其中可以找到模式。为了可靠地做到这一点,建议在里面使用一个 shell 循环
sh -c
来打印文件名和相关的字数或者
grep
单独使用而不使用 find,使用--include
允许提供 glob 表达式以在递归时仅搜索那些文件的标志(GNU/BSD 变体)我建议还使用ripgrep,默认情况下递归地对文件进行 greps 并且速度更快(source)。你可以在其中做