lexa-lexa
Goto Top

Linux Erklärbär zu awk gesucht

Hi,

warum funktioniert folgendes *nicht*:

FS="/backups"; SIZE=$(df -P | awk '$6==$FS {print $2}'); echo $SIZE

So (ohne $FS) gehts jedoch:

SIZE=$(df -P | awk '$6=="/backups" {print $2}'); echo $SIZE

Ich will das in einem Script verwenden uns würde gern mit der Variablen $FS arbeiten.
Wieso kann awk das $FS nicht verarbeiten?

Ich habe alle Varianten durch, die mir sinnvoll erschein inkl. Escaping der "" und mit und ohne usw... face-confused

Content-ID: 278237

Url: https://administrator.de/contentid/278237

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

Endoro
Lösung Endoro 24.07.2015, aktualisiert am 28.07.2015 um 23:09:02 Uhr
Goto Top
Hey,
FS ist eine vordefinierte awk-Variable.
http://grymoire.com/Unix/Awk.html#uh-15
Gruß, Endoro

PS: das ist aber nicht die Erklärung :/
Sondern der Ausdruck $FS würde nach einer Feldvariablen mit der Nummer FS vergeblich suchen.

PPS: meine Güte, das ist auch nicht die richtige Erklärung :/
Bash-Variable richtig "escapen":
FS="/backups"  
SIZE=$(df -P | awk '$6=="'"$FS"'" {print $2}')  
echo $SIZE
SeriousEE
Lösung SeriousEE 24.07.2015, aktualisiert am 28.07.2015 um 23:09:02 Uhr
Goto Top
Hallo,

folgendes könnte auch funktionieren:
SIZE=$(df -P | awk '$6==var {print $2}' var=$FS);  

Verwendung einer Variable in awk.

Grüße
lexa-lexa
lexa-lexa 25.07.2015 um 12:19:10 Uhr
Goto Top
Danke!
Funktioniert und sieht eleganter aus, als das Escapen mit " ' " was aber auch funktioniert.

Darf ich schnell noch was Ähnliches nachschieben?

Ich hatte mal ein Problem mit einer Raute "#" in einem FTP Passwort. Ich konnte z.B. ncftpput in einem ShellScript nicht dazu bringen, dass Passwort zu verwenden. Die bash hat immer alles, was nach # kam, als Kommentar interpretiert uund damit war der Befehl unvollständig.

ncftpput -u ich -p pass#word -h some.host ....

Das Escapen kenne ich nur mittels "\". So wie der Kollege aus dem anderen Post ist es mir nicht geläufig und verstehen tue ich es auch nicht. Also habe ich probiert:

ncftpput -u ich -p pass\#word -h some.host ....
ncftpput -u ich -p pass\\#word -h some.host ....
$PW="pass\#wort" ... usw.

Ich habe dann einfach das Passwort geändert und seitedem spukt dieses irre Problem in meinem Kopf herum face-wink
lexa-lexa
lexa-lexa 25.07.2015 um 12:25:02 Uhr
Goto Top
Danke dir. Es funktioniert, obwohl ich dieses Escapen nicht verstehe, denn an der Bash kenne ich das nur mittels einfachem, doppelten, dreifachen usw. "\"
Schön zu sehen, wie du dich an die Lösung rankämpfen musstest face-smile)

PS: $FS war nur unglücklich gekürzt. Im Script heisst die Variable $FILESYSTEM, was für awk eindeutig ist. Vielleicht kannst du mir bei meinem Passwort Problem helfen, was ich beim Kollegen Nachposter beschrieben habe. Muss nicht gleich sein ... face-wink
114757
Lösung 114757 25.07.2015, aktualisiert am 28.07.2015 um 23:08:52 Uhr
Goto Top
Moin,
Ich hatte mal ein Problem mit einer Raute "#" in einem FTP Passwort.
Richtig angewendet kein Problem:
http://tldp.org/LDP/abs/html/special-chars.html

echo "The # here does not begin a comment."
echo 'The # here does not begin a comment.'
echo The \# here does not begin a comment.
echo The # here begins a comment.
Also
PW='pass#wort'
ncftpput -u ich -p "$PW" -h some.host
oder
ncftpput -u ich -p 'pass#wort' -h some.host
sollte problemlos klappen.

Gruß jodel32