2017-10-25 8 views
0

Wie kann eine Variable in einem awk Befehl verwendet werden, um eine Spalte einer Datei in einem if Zustand zu lesen?awk - AWK-Variable in if-Bedingung

z.B. Nehmen wir an, wir lesen die Spalte 2 einer nachstehenden Beispieldatei, in der fcolumn1 den Wert 2, startdate als 2014-09-22 00:00:00 und enddate als 2014-09-23 00:00:00 enthält.

abcd,2016-04-23 02:35:34,sdfsdfsd 
sdsd,2016-04-22 02:35:34,sdfsdfsd 

Im Folgenden Befehl funktioniert:

awk -v startdate="$startdate" -v enddate="$enddate" -F"," ' 
{ 
    if ($2>=startdate && $2<enddate) 
    { 
     print $2 
    } 

}' 

Erwartung ist $2 so dynamisch zu machen, wie unten:

awk -v startdate="$startdate" -v enddate="$enddate" -v "fcolumn1=${fcolumn1}" -F"," ' 
{ 
    if (fcolumn1 != "") 
    { 

     if (**$fcolumn1**>=startdate && **$fcloumn1**<enddate) 
     { 
      print "$fcolum1" 
     } 
    } 
}' 

Antwort

1

Zuerst wird der if Block ist überflüssig, da awk Programme die folgende (vereinfachte folgen) Struktur:

CONDITION { ACTIONS } CONDITION {ACTIONS} ... 

Sie können die Bedingung schreiben, ohne die if Aussage:

awk '$2>=startdate && $2<enddate { print $2 }' file 

Wenn Sie die aktuelle Spaltennummer konfigurierbar über eine Variable machen wollen, beachten Sie, dass Sie eine Spalte mit einer Variablen in awk adressieren , wie folgt:

awk -v col=2 '{print $col}' 
+0

Ich möchte $ 2 dynamisch von Variable machen. – Bunny

+0

Wenn Sie die Spaltennummer zu einer Variablen machen wollen, können Sie verwenden: 'awk -v col = 2 '$ col <= Startdatum {...}'' – hek2mgl