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-Key: 278237

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

Printed on: April 20, 2024 at 00:04 o'clock

Member: Endoro
Solution Endoro Jul 24, 2015, updated at Jul 28, 2015 at 21:09:02 (UTC)
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
Member: SeriousEE
Solution SeriousEE Jul 24, 2015, updated at Jul 28, 2015 at 21:09:02 (UTC)
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
Member: lexa-lexa
lexa-lexa Jul 25, 2015 at 10:19:10 (UTC)
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
Member: lexa-lexa
lexa-lexa Jul 25, 2015 at 10:25:02 (UTC)
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
Mitglied: 114757
Solution 114757 Jul 25, 2015, updated at Jul 28, 2015 at 21:08:52 (UTC)
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