根据文件中的第一行从一组文件中获取最新时间戳

根据文件中的第一行从一组文件中获取最新时间戳

每天我都会在一个路径中收到 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]

相关内容