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