每天我都会在一个路径中收到 16 个文件/Home/h87654/file/
。每个文件的第一行都有一个包含当天日期 (YYYYMMDD) 的字符串。日期的位置不固定,它可以在第一行的任何位置。我想根据第一行的日期获取每天到达的最新文件。
对于问题太广泛表示歉意。
我是 UNIX 新手。下面是我正在处理的代码。
/Home/h87654/latest_file.txt 这将在第一行包含所有 16 个文件,其各自的日期。在这 16 个文件中,我需要获取带有时间戳的最新文件,例如:如果我们今天运行脚本,即 2018-06-11 。在第一个循环中,开始日期为 20180501,结束日期为 20180531,latest_file.txt 将在第一行包含包含 20180501 的所有文件。我需要最后出现的文件及其时间戳并将两者写入 time.txt
第二个循环,latest_file.txt 将在第一行包含包含 20180502 的所有文件,我需要最后一个文件及其时间戳,并将两者附加到 time.txt
第三次循环,latest_file.txt 将在第一行包含包含 20180503 的所有文件,我需要最后一个文件及其时间戳,并将两者都附加到 time.txt 等等,直到月底。 $结束日期
cd /Home/h87654/file/
start_date=`date -d "-1 month -$(($(date +%d)-1)) days" +%Y%m%d` ##start of month in yyyymmdd
end_date=`date -d "-$(date +%d) days " +%Y%m%d` ##end of month in yyyymmdd
while [ "$start_date" > "$end_date" ]; ##execute for each day for a monnth
do
awk 'FNR==1{if($0~"$start_date")print FILENAME;}' /Home/h87654/file/*.* >/Home/h87654/latest_file.txt ##check ist date in the first line and print the file name
##am stuck here .. idk how to proceed
done
答案1
不确定你到底在问什么。
要获取第一行包含最大 8 位数字的文件的路径,请使用zsh
:
getdate() {
local MATCH
IFS= read -r < $REPLY && [[ $REPLY =~ '[[:digit:]]{8}' ]]
REPLY=$MATCH
}
printf '%s\n' /Home/h87654/file/*.*(O+getdate[1])
要获取最大日期以及包含该最大日期作为第一行第一个 8 位数序列的所有文件,您可以执行以下操作:
typeset -A bydate
for file (/Home/h87654/file/*.*) {
IFS= read -r line < $file &&
[[ $line =~ '[[:digit:]]{8]' ]] &&
bydate[$MATCH]+=$file$'\n'
}
latest=${${(kO)bydate}[1]}
printf 'Latest date: %s\nFiles:\n%s' $latest $bydate[$latest]