2017-10-17 6 views
1

j'ai un format de fichier comme: -Sélectionnez les enregistrements de fichiers par date

10077083725 06-OCT-17 32 06-OCT-17 
10077083725 09-OCT-17 35 09-OCT-17 

Je veux sélectionner les enregistrements (environ 1 million) en fonction des conditions de date dans la colonne 4, comme au cours des 2 derniers mois . 2 solutions: -

1) Convertissez le format de la date en quelque chose comme: - 20170610, puis faites une simple comparaison de chaînes en utilisant awk.

2) Effectuer directement des comparaisons de date.

Pouvez-vous suggérer lequel est le meilleur. De plus, je n'ai pas réussi à trouver une solution pour la seconde en utilisant des scripts shell, donc toutes les astuces seraient utiles.

+0

la question ne sait pas, élaborer. Quel devrait être le résultat de la comparaison? quelles colonnes doivent être comparées? – RomanPerekhrest

Répondre

0

awk solution sur MacOSX avec coreutils installé. Pour l'utiliser sur Linux, remplacez gdate par date. Ma réponse est une sorte de combinaison des deux vos solutions:

# cat tst.awk 
BEGIN{d=conv(d)} 
d <= conv($4) 
func conv(str) { 
    cmd = "gdate -d '" str "' +'%Y%m%d'" 
    res = ((cmd | getline line) > 0 ? line : "") 
    close(cmd) 
    return res 
} 

Utilisation comme entrée:

# cat file 
10077083725 06-OCT-17 32 06-OCT-17 
10077083725 09-OCT-17 35 09-OCT-17 

alors:

# awk -v d="-9 days" -f tst.awk file 
10077083725 09-OCT-17 35 09-OCT-17 
+0

est-il un problème en utilisant ce sur le terminal (mac). – Sanchay

+0

MacOSX utilise la version BSD de la date. Vous devrez installer 'coreutils' pour mettre la main sur la date GNU. "infuser installer coreutils" fera ici. Ensuite, vous devrez changer l'appel 'date' en' gdate'. Je vais adapter ma réponse en reflétant cela. –