Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用命令输出作为shell脚本中grep的输入_Linux_Shell - Fatal编程技术网

Linux 如何使用命令输出作为shell脚本中grep的输入

Linux 如何使用命令输出作为shell脚本中grep的输入,linux,shell,Linux,Shell,我有一个shell脚本,它每天从多个日志文件中获取大量数据。此外,我还创建了另一个脚本,该脚本将对该数据进行更多处理,并grep一个字符串,并使用grep-c进行计数 我尝试了下面提到的方法,但第二个脚本并没有从第一个输出中获取输入 ./myfirstsctipt | ./mysecondscript 我的第二个脚本将如何使用第一个脚本输出作为grep脚本的输入 我曾尝试使用firstscript作为第二个参数,如下所示,但没有成功 ./mysecondscript $(./myfirstsc

我有一个shell脚本,它每天从多个日志文件中获取大量数据。此外,我还创建了另一个脚本,该脚本将对该数据进行更多处理,并grep一个字符串,并使用
grep-c
进行计数

我尝试了下面提到的方法,但第二个脚本并没有从第一个输出中获取输入

./myfirstsctipt | ./mysecondscript
我的第二个脚本将如何使用第一个脚本输出作为grep脚本的输入

我曾尝试使用
firstscript
作为第二个参数,如下所示,但没有成功

./mysecondscript $(./myfirstsctipt )
即使它不使用cat作为第一个命令,我的文件内容也是这样

TIME+2019-10-25 00:09:11.184
TIME+2019-10-25 00:12:11.184
TIME+2019-10-25 00:13:11.184
TIME+2019-10-25 00:16:11.184
TIME+2019-10-25 00:18:11.184
TIME+2019-10-25 00:20:11.184
TIME+2019-10-25 00:22:11.184
TIME+2019-10-25 00:26:11.184
TIME+2019-10-25 00:27:11.184
TIME+2019-10-25 00:28:11.184
TIME+2019-10-25 00:30:11.184
而且
mysecondscript

#!/bin/bash
#set -vx

for hour in `seq -w 0 23`
do
  for min in `seq -w 0 59`
  do
    a=`grep -c "$hour:$min:"  `
    echo "$hour:$min   $a"
  done
done
我试着如下

cat test2 | ./mysecondscript.sh

您不能多次读取标准输入。第一次迭代消耗了第一次调用
grep-c
时的所有输入,随后的迭代只会画出众所周知的空白

你可以用一个临时文件来解决这个问题(习惯用法是
t=$(mktemp-tfoo.XXXXXXXX)| exit;cat>“$t”;trap'rm-f“$t”'ERR exit
,然后
grep-c regex“$t”
,如果可以的话,你想避免使用临时文件,无论如何,在这种情况下,一个更有效的解决方案是只读取一次输入

awk'{t[substr($2,1,5)]++}

结束{for(h=0;h
/myfirstsctipt |./mysecondscript
如果脚本正确,应该可以工作。如果没有看到它们,就不能再多说了。第一个脚本执行您询问的操作,如果第二个脚本读取标准输入的参数,第二个脚本执行命令行参数。如果两者都不起作用,则说明其他问题。引用?什么不起作用实际数据是什么样子的?是否包含错误的DOS线路终止符?另请参见,(U&L.SE),(SO),(AskU)等。我已经更新了问题的所有细节