![如何查看日期列距今天小于 x 天的行](https://linux22.com/image/79124/%E5%A6%82%E4%BD%95%E6%9F%A5%E7%9C%8B%E6%97%A5%E6%9C%9F%E5%88%97%E8%B7%9D%E4%BB%8A%E5%A4%A9%E5%B0%8F%E4%BA%8E%20x%20%E5%A4%A9%E7%9A%84%E8%A1%8C.png)
我的档案
ID=29524 02/12/2015,23:59:34,'PAt, 0,
ID=29628 02/12/2015,23:59:37,'PAb, 1.9,
ID=30816 03/12/2015,00:00:20,'PAc, 4.15,
我想打印比今天少 X 天的文件。
我的尝试如下:
cat response.txt | awk -v start=$(date -d "-5 days" +%d/%m/%Y) -F" " '{split($2, a, /\//)} (a[3] a[1] a[2] <start)'| cut -d, -f1
答案1
我假设当您说比今天少 X 天时,您的意思是“超过 5 天”的文件。如果您的意思是正好 5 天的文件,则需要修改下面的脚本以删除最有可能的时间戳,并且 -lt 可以替换为 -eq
#!/bin/bash
CUTOFF=$(date +%s -d "5 days ago")
while read p; do
time=$(echo $p | awk -F'[ ,]' '{print $2" "$3}')
epoch_time=$(date --date="$time" +%s)
if [ $epoch_time -lt $CUTOFF ]; then
echo $p
fi;
done <response.txt
上面的代码将加载response.txt并循环遍历文件中的每一行。 awk 按空格和逗号解析为单独的列,然后打印日期和时间。之后(可能可以在同一行中完成),它将日期/时间转换为以秒为单位的纪元时间。之后,通过 if 语句将截止时间(以秒为单位)与文件时间进行比较就很简单了。
以上只会打印文件超过 5 天。