2016-03-30 12 views
-1

Ich mag das Datum aus einer TXT-Datei wie folgt nehmen:nimmt Datum Datei in Unix

933|Mahinda|Perera|male|1989-12-03|2010-03-17T13:32:10.447+0000|192.248.2.123|Firefox 
1129|Carmen|Lepland|female|1984-02-18|2010-02-28T04:39:58.781+0000|81.25.252.111|Internet Explorer 
4194|Hồ Chí|Do|male|1988-10-14|2010-03-17T22:46:17.657+0000|103.10.89.118|Internet Explorer 
8333|Chen|Wang|female|1980-02-02|2010-03-15T10:21:43.365+0000|1.4.16.148|Internet Explorer 

und vergleichen Sie es mit einem Datum, dass der Benutzer als Eingabe für diesen Befehl gibt:

./tool.sh --born-since <dateA> --born-until <dateB> -f <file> 

und die Zeilen mit den Daten zwischen den ausdrucken, die eingegeben werden .. ich verwende diesen Code:

dateA= date -d "$2" +%Y%m%d 
dateB= date -d "$4" +%Y%m%d 
echo $2 

awk -F'|' -v from=$2 -v to=$4 '{gsub("-","",$5); 
      gsub("-","",from); gsub("-","",to)} 
from <= $5 && $5 <= to ' persons.dat.txt 

, aber er druckt gerade aus: 1982-05-29

wenn ich laufen ./tool.sh --born-seit 1982.05.29 --born-bis 1.1.2010

+0

Was meinen Sie mit "etwas läuft schief"? Erzähl uns! Wie sonst erwartest du, dass wir helfen? – arkascha

+0

Ich habe den Text bearbeitet, schau jetzt: D – user3217800

+0

Ja, stimme mit oben überein. Zeige einen einzelnen Aufruf ** mit Argumentwerten ** und der Ausgabe. Wenn die Ausgabe nicht offensichtlich falsch ist, geben Sie bitte das Problem an. Viel Glück. – shellter

Antwort

2

Soweit ich in meinem kurzen Experiment kann sagen, Sie brauchen nicht die gsub seit gawk Strings von lexikalischer Reihenfolge vergleichen (und wenn Sie Ihre Termine sind YYYY-MM-DD und LANG=C, lexikalische und Datum ist gleich).

So lief ich

gawk -F'|' -v from='1982-05-29' -v to='2010-01-01' '(from<=$5) && ($5<=to)' persons.dat.txt 

und bekam

933|Mahinda|Perera|male|1989-12-03|2010-03-17T13:32:10.447+0000|192.248.2.123|Firefox 
1129|Carmen|Lepland|female|1984-02-18|2010-02-28T04:39:58.781+0000|81.25.252.111|Internet Explorer 
4194|Hồ Chí|Do|male|1988-10-14|2010-03-17T22:46:17.657+0000|103.10.89.118|Internet Explorer 

das wie folgt aussieht, was du mir wollen.

Der Rest Ihres Codes versucht, dateA und dateB zuzuweisen, aber verwendet es nirgendwo. Außerdem sieht es so aus, als ob Sie eine $() dort vermissen: Wenn Sie das Ergebnis Ihres Datumsbefehls in dateA setzen möchten, verwenden Sie dateA=$(date -d "$2" +%Y%m%d) obwohl vorausgesetzt, dass Sie YYYY-MM-DD auf Datei haben, sehen dateA=$(date -d "$2" +%Y-%m-%d) like einen besseren Plan.