2017-11-30 5 views
0

geben ich versuche, eine Linie durch eine Angabe Zahl in einer Variablen zu erhalten, so dass ich AWK Befehl versuchen:Drucken eine Zeile durch eine Zahl in Variable

ich tat:

DATE_ISSUE_OPIT_SIP="31456 
12390 
11232 
12222" 

COUNTER_NUMBER=1 
line=$(awk 'NR==$COUNTER_NUMBER' <<< "$Date_ISSUE_OPIT_SIP") 

Ausgang ist leer.

möchte ich die Ausgabe wie folgt zum Beispiel:

COUNTER_NUMBER=2 
line=$(awk 'NR==$COUNTER_NUMBER' <<< "$Date_ISSUE_OPIT_SIP") 
echo $line 
11232 

der Dank für die Hilfe

+1

'line = $ (awk -v cn = $ COUNT_NUMBER 'NR == cn' <<< "$ Date_ISSUE_OPIT_SIP"' –

+1

Auch in der Schale, Fall Angelegenheiten. Die Variable 'Date_ISSUE_OPIT_SIP' ist undefiniert. Sie haben wahrscheinlich' DATE_ISSUE_OPIT_SIP' gemeint. – John1024

Antwort

1

Die einfachste Fix wird einfache Anführungszeichen mit doppelten Anführungszeichen

... awk "NR==$COUNTER_NUMBER" <<< "$DATE_ISSUE_OPIT_SIP" 

beachten Sie auch, dass die Variable ersetzen Die Namen, die Sie verwendet haben, stimmen nicht überein.

+0

Ich glaube nicht, dass Ihre Lösung in einer reinen Posix-Shell funktioniert. Während bash und Zsh '' '' haben, hat Posix es nicht, AFIK. – user1934428

+1

Das wurde von OP kopiert. – karakfa

1

Awk hat eine Wonderly einfache Möglichkeit, eine interne Variable der Einstellung, indem sie auf der Kommandozeile übergeben:

txt="31456 
12390 
11232 
12222" 

n=2 
line=$(awk 'NR==counter' counter=$n <<< "$txt") 
echo "$line" 
12390 

Es bedeutet auch, Sie nicht einfach eine Datei mit einem = im Namen haben können.

Sie können auch tun:

line=$(awk -v counter=$n 'NR==counter' <<< "$txt") 

Hinweis: NR beginnt am 1. So die 3. Linie zu bekommen, würden Sie 3 in Ihrem Beispiel passieren.

0

Es ist OK mit sed zu

sed "$COUNTER_NUMBER"'!d' <<< "$DATE_ISSUE_OPIT_SIP"