亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用于在一系列文件中進行 grep 的 Shell 腳本

用于在一系列文件中進行 grep 的 Shell 腳本

PHP
狐的傳說 2021-09-05 18:00:43
我正在設置一個腳本,該腳本通過read命令獲取一些用戶數據。使用這些數據,我需要搜索文件范圍,然后進行一些過濾。這是它的樣子,Enter fromtimeread fromtimeEnter totimeread totimeEnter the IDread id最初我通過 SSH 連接到服務器,然后在那里我有一個目錄,cd home/report/records這里有路徑記錄,我有:REC_201901020345.gz (yyyymmddhhmm)REC_201901120405.gzREC_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.shEnter fromtimeread fromtimeEnter totimeread totimeEnter the IDread idssh $user@$ipcd /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文件范圍內帶有' 的數據。
查看完整描述

2 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

試試下面的命令。

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.
對輸入進行排序,從而得到用標記括起來的所需文件名。
Both sed,僅打印標記之間的線條。
最后一個是命令,應該為每個文件名執行。

您可以省略管道和所有下一個命令,從結尾開始,并查看輸出是如何構建的。


查看完整回答
反對 回復 2021-09-05
?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

要獲取給定范圍(fromtime、totime)內的文件列表,可以使用以下 shell 腳本:


declare -i ta

for file in REC*.gz

do 

    ta=$(echo "${file}" | grep -oP 'REC_\K(.*)(?=[[:digit:]]{2}.gz)')

    if [ "${ta}" ] ; then  

       if [ ${ta} -le ${totime} -a ${ta} -ge ${fromtime} ] ; then 

          echo -e "${file}"

       fi

    fi  

done


查看完整回答
反對 回復 2021-09-05
  • 2 回答
  • 0 關注
  • 159 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號