我正在设置一个脚本,它使用 read 获取一些用户数据命令。使用这些数据,我需要搜索文件范围,然后进行一些过滤。
事情是这样的,
Enter fromtime
read fromtime
Enter totime
read totime
Enter the ID
read id
最初我通过 SSH 连接到一个服务器,然后我有一个目录,Records with path
cd home/report/records在这里,我有:
REC_201901020345.gz (yyyymmddhhmm) REC_201901120405.gz REC_201903142543.gz 等等。
这些文件有数据以及
$id .
当用户输入
$fromtime和
$totime格式为 yyyymmddhh 。在这里,我需要转到该文件范围,然后
grep对于
$id和显示。例如:
如果
$fromtime是
2019010103和
$totime是
2019031425 .我只需要转到
REC_201901020345.gz 的特定文件范围。 ,
REC_201901120405.gz ,
REC_201903142543.gz并执行
grep找到
id由用户输入。
我已经使用
if 进行了尝试。条件,但它似乎不起作用。我是编写这样的脚本的新手。当我在这里描述所有内容时,可能会有错误。对不起,同样。
source config.sh
Enter fromtime
read fromtime
Enter totime
read totime
Enter the ID
read id
ssh $user@$ip
cd /home/report/records
# <-- need to know what to add here as described here, to navigate to the
# <-- specific range $fromtime-$totime. Then the command to find id will be
zfgrep $id *.gz
结果应该只有
id 的数据。的
.gz 的指定范围内文件。
请您参考如下方法:
试试下面的命令。
echo -e "$(ls -1 REC_????????????.gz 2>/dev/null)\nREC_${fromtime}##\nREC_${totime}##" | sort | sed -n "/##/,/##/p" | sed '1d;$d' | xargs zfgrep -a "$id"
解释:
'fromdate' 和 'todate' 以及
## (比如标记)附加到
ls 的输出中.
对输入进行排序,得到带有标记的所需文件名。
两个
sed , 仅打印标记之间的行。
最后一个是命令,应该为每个文件名执行。
您可以从 end 开始省略管道和所有下一个命令,并查看输出是如何构建的。




