我正在設(shè)置一個腳本,該腳本通過read命令獲取一些用戶數(shù)據(jù)。使用這些數(shù)據(jù),我需要搜索文件范圍,然后進(jìn)行一些過濾。這是它的樣子,Enter fromtimeread fromtimeEnter totimeread totimeEnter the IDread id最初我通過 SSH 連接到服務(wù)器,然后在那里我有一個目錄,cd home/report/records這里有路徑記錄,我有:REC_201901020345.gz (yyyymmddhhmm)REC_201901120405.gzREC_201903142543.gz等等。這些文件包含數(shù)據(jù)以及$id.當(dāng)用戶輸入時$fromtime,$totime它將是 yyyymmddhh 格式。在這里,我需要轉(zhuǎn)到該范圍的文件,然后grep進(jìn)行$id顯示。例如:如果$fromtime是2019010103并且$totime是2019031425。我只需要轉(zhuǎn)到那些特定范圍的文件,即REC_201901020345.gz, REC_201901120405.gz,REC_201903142543.gz并執(zhí)行g(shù)rep以查找id用戶輸入的內(nèi)容。我已經(jīng)使用if條件嘗試過這個,但它似乎不起作用。我是編寫此類腳本的新手。當(dāng)我在這里描述所有內(nèi)容時可能會有錯誤。對不起。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結(jié)果應(yīng)該只是id指定.gz文件范圍內(nèi)帶有' 的數(shù)據(jù)。
2 回答

湖上湖
TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超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' 連同##
(比如標(biāo)記)被附加到ls
.
對輸入進(jìn)行排序,從而得到用標(biāo)記括起來的所需文件名。
Both sed
,僅打印標(biāo)記之間的線條。
最后一個是命令,應(yīng)該為每個文件名執(zhí)行。
您可以省略管道和所有下一個命令,從結(jié)尾開始,并查看輸出是如何構(gòu)建的。

哈士奇WWW
TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個贊
要獲取給定范圍(fromtime、totime)內(nèi)的文件列表,可以使用以下 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 關(guān)注
- 158 瀏覽
添加回答
舉報
0/150
提交
取消