2017-05-16 5 views
0

Ich habe gerade begonnen,zu verwenden. Hier schließe ich meine awk Code, der verwendet wird, um die Namen der Person abrufen, die alle geboren werden am oder vor demMMDDYYYY Datum Format Vergleich in awk

awk -F "\t" '(substr($2,5,4)<1997||(substr($2,5,4)==1997 && substr($2,1,2)<=05 && substr($2,3,2)<=17)) {print $1}' <input.txt 

Daten am input.txt

Bharath 01061992 
Ragul 10302002 
Bala 01171993 
Arjun 05142003 
Vimal 06301997 
Ramesh 05171997 
Kamal 05151997 
Vinoth 05201997 

Es gut für Now . Ich möchte wissen Gibt es eine andere Möglichkeit, zwei Daten zu vergleichen als meine Vergleichsmethode?

+2

Können Sie einige Beispielzeilen aus Ihrer Eingabedatei teilen? Was ist $ 2? – Inian

+4

Verketten Sie die Teilstrings in YYYYMMDD Reihenfolge und dann können Sie nur einen einzigen Vergleich verwenden. –

+0

Ich musste 'int (substr ($ 2,5,4))' tun, um die obige Arbeit zu machen. Wird auch '<= 1997 'im Datumsvergleich verwendet (wenn Sie sowohl' && 'als auch' || 'verwenden, benötigen Sie möglicherweise Klammern, um die Priorität anzugeben). Wenn Sie sich mit Terminen beschäftigen, sollten Sie in Betracht ziehen, [epoch timestamps] (https://en.wikipedia.org/wiki/Unix_time) zu verwenden. – urban

Antwort

2

Sie können sie in das ISO-Datumsformat umordnen, das einfach für arithmetische Vergleiche verwendet werden kann.

Angenommen, Sie haben GNU awk (für Gensub).

awk -F'\t' -vdate="19970517" 'date>=gensub(/(....)(....)/,"\\2\\1",1,$2){print $1}' f 

produziert

Bharath 
Bala  
Ramesh 
Kamal