我正在設置一個腳本,該腳本通過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
,僅打印標記之間的線條。
最后一個是命令,應該為每個文件名執行。
您可以省略管道和所有下一個命令,從結尾開始,并查看輸出是如何構建的。

哈士奇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
- 2 回答
- 0 關注
- 159 瀏覽
添加回答
舉報
0/150
提交
取消