DEV Community

Query Filter
Query Filter

Posted on

filter4

#!/bin/bash

# Usage: cat file.csv | ./filter_lastNdays.sh <date_column_number> <days>
# Example: cat file.csv | ./filter_lastNdays.sh 4 45

if [ -z "$1" ] || [ -z "$2" ]; then
    echo "Usage: $0 <date_column_number> <days>"
    exit 1
fi

DATE_COL="$1"
DAYS="$2"

# Cutoff timestamp N days ago
CUTOFF=$(date -d "-$DAYS days" +%s)

awk -F'~' -v col="$DATE_COL" -v cutoff="$CUTOFF" '
{
    ts = $col

    # Remove milliseconds completely (:123)
    gsub(/:[0-9]{3}/, "", ts)

    # Ensure space before AM/PM if missing
    gsub(/([AP]M)$/, " \\1", ts)

    # Convert to epoch seconds
    cmd = "date -d \"" ts "\" +%s"
    cmd | getline t
    close(cmd)

    if(t >= cutoff) print
}'

Enter fullscreen mode Exit fullscreen mode

Top comments (0)