gpt4 book ai didi

php - 用于在一系列文件中进行 grep 的 Shell 脚本

转载 作者:行者123 更新时间:2023-12-02 14:13:25 24 4
gpt4 key购买 nike

我正在设置一个脚本,它使用 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和显示。例如:

    如果 $fromtime2019010103$totime2019031425 .我只需要转到 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 开始省略管道和所有下一个命令,并查看输出是如何构建的。

    关于php - 用于在一系列文件中进行 grep 的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56802578/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com