2016-09-07 4 views
1

Ich filtere die vierte Spalte in einer Datei mit dem Befehl unten. es funktioniert gut in der Konsoleawk-Befehl funktioniert in der Konsole, funktioniert aber nicht im Shell-Skript

[[email protected] Now]$ creationTime="8:15 PM" 
[[email protected] Now]$ awk -F, -v var="$creationTime" '{if($4==var) print}' input.txt 
serial1,tech,EU,8:15 PM,gan 

Hinzugefügt den gleichen Befehl in Shell-Skript, aber es funktioniert nicht.

$ cat test.sh 
creationTime=$(date -d '330 minutes' +"%l:%M %p") 

echo $creationTime 
awk -F, -v var="$creationTime" '{if($4==var) print}' input.txt 

Output während execting das Skript

[[email protected] Now]$ sh test.sh 
8:15 PM 

input.txt

serial1,tech,APAC,8:09 PM,anz 
serial1,tech,EU,8:15 PM,gan 
+0

Da die Zeit dynamisch im Skript berechnet, kann der Zeitstempel einfach nicht Teil von 'input.txt' – hek2mgl

Antwort

2

Das Problem könnte sein, dass $creation_time führende Leerzeichen enthält. Wenn Sie es mit echo untersuchen, sind sie möglicherweise nicht sichtbar, aber sie stimmen definitiv nicht mit $4 in awk überein. Beispiel:

$ creationTime=$(date -d '330 minutes' +"%l:%M %p") 
$ echo ">${creationTime}<" 
> 4:50 PM< 

Versuchen Sie stattdessen:

creationTime=$(date -d '330 minutes' +"%l:%M %p" | sed 's/^ *//') 
+0

Thanks a lot .. Das bearbeitetem! –

Verwandte Themen