chewmanfoo 0 Posted February 14, 2004 Guys, I'm writing a series of scripts for deploying in our support center. One that I'm working on involves /proc/kcore, the physical RAM of a linux system. I'm trying to display the amount of physical RAM in a system by returning the size of this file divided by 1024. I'd like it to eventually say: PHYSICAL RAM: 512MB. Here's what I've tried, and the results: Code: $ echo "System RAM";ls -l /proc/kcoreSystem RAM-r-------- 1 root root 958595072 Feb 14 13:13 /proc/kcore$ $ ls -l /proc/kcore | 'expr $5/1024'/bin/ksh: expr $5/1024: not found$ ls -l /proc/kcore | echo $5$ ls -l /proc/kcore | echo $1$ ls -l /proc/kcore > echo $5/bin/ksh: cannot create echo: No such file or directory$ ls -l /proc/kcore | awk "print int($5/1024)"awk: cmd. line:1: print int(/1024)awk: cmd. line:1: ^ parse errorawk: cmd. line:1: print int(/1024)awk: cmd. line:1: ^ unterminated regexpawk: cmd. line:2: print int(/1024)awk: cmd. line:2: ^ unexpected newline$ ls -l /proc/kcore | awk {print int($5/1024)}/bin/ksh: syntax error: `(' unexpected$ ls -l /proc/kcore | awk `BEGIN {print int($5/1024)}'> > ^C$ $ ls -l /proc/kcore | awk `{print int($5/1024)}`/bin/ksh: syntax error: `(' unexpected$ ls -l /proc/kcore | awk -F `{print int($5/1024)}'> > ^C$ ls -l /proc/kcore | awk -F `{print int($5/1024)}'> ^C$ awk '{ print int($5/1024) }` < ls -l /proc/kcore> ^C$ ls -l /proc/kcore > temp; awk '{ print int($5/1024) }` temp> ^C As you can see, I'm stuck on awk. Can anyone shed some light on this? I basically want to take the 5th field of an ls and display the result of that field divided by 1024. Anyone? TIA! chewy Share this post Link to post
Maillion 0 Posted February 15, 2004 I think there's an error in these two lines: Code: $ ls -l /proc/kcore | 'expr $5/1024'/bin/ksh: expr $5/1024: not found The AWK stuff is causing problems because these lines are sending AWK invalid data... (GIGO). I hopes this helps but I'm not that familiar with bash scripting, just prgramming... 8) Share this post Link to post
Maillion 0 Posted February 15, 2004 . Quote: 'm writing a series of scripts for deploying in our support center. One that I'm working on involves /proc/kcore, the physical RAM of a linux system. I'm trying to display the amount of physical RAM in a system by returning the size of this file divided by 1024. I'd like it to eventually say: PHYSICAL RAM: 512MB. Here's what I've tried, and the results: Code: $ echo "System RAM";ls -l /proc/kcore System RAM -r-------- 1 root root 958595072 Feb 14 13:13 /proc/kcore $ $ ls -l /proc/kcore | 'expr $5/1024' /bin/ksh: expr $5/1024: not found $ ls -l /proc/kcore | echo $5 $ ls -l /proc/kcore | echo $1 $ ls -l /proc/kcore > echo $5 /bin/ksh: cannot create echo: No such file or directory $ ls -l /proc/kcore | awk "print int($5/1024)" awk: cmd. line:1: print int(/1024) awk: cmd. line:1: ^ parse error awk: cmd. line:1: print int(/1024) awk: cmd. line:1: ^ unterminated regexp awk: cmd. line:2: print int(/1024) awk: cmd. line:2: ^ unexpected newline $ ls -l /proc/kcore | awk {print int($5/1024)} /bin/ksh: syntax error: `(' unexpected $ ls -l /proc/kcore | awk `BEGIN {print int($5/1024)}' > > ^C $ $ ls -l /proc/kcore | awk `{print int($5/1024)}` /bin/ksh: syntax error: `(' unexpected $ ls -l /proc/kcore | awk -F `{print int($5/1024)}' > > ^C $ ls -l /proc/kcore | awk -F `{print int($5/1024)}' > ^C $ awk '{ print int($5/1024) }` < ls -l /proc/kcore > ^C $ ls -l /proc/kcore > temp; awk '{ print int($5/1024) }` temp > ^C As you can see, I'm stuck on awk. Can anyone shed some light on this? I basically want to take the 5th field of an ls and display the result of that field divided by 1024. The output of: ls -l /proc/kcore is: -r-------- 1 root root 958595072 Feb 14 13:13 /proc/kcore The number of column 5 should go into "$5" (apparently a variable) which should then be divided ("/") by 1024, to get the number of bytes in megabytes. The number in column 5 may not be 'numeric', it may be a string of characters. This is most likely. There is nothing here to separate column five from all the other columns, nor to determine and/or change column five to a number and store it in a variable. Some programming languages will allow a character string to be divided by an integer, but the results will not be valid in a mathematic expression. this: $ ls -l /proc/kcore | 'expr $5/1024' takes the output from "ls -l" and sent it through "|" to "'expr $5/1024'" here is where the error comes in - when the shell executes that command ($ ls -l /proc/kcore | 'expr $5/1024') It sends all the "ls -l" output to what is on the other side of the "|". It does not extract column 5, nor does it ensure that the output is valid. When the command is executed you get: /bin/ksh: expr $5/1024: not found This is an error from the shell (/bin/ksh) - it could not execute "ls -l /proc/kcore | " because it was unable to locate something called 'expr $5/1024'. I have never used ksh, but it may be different than bash, but it still seems that 'expr $5/1024' means simething different to your shell than 'expr $5/1024' means to you. Regardless, because your shell does not have the ouput of 'expr $5/1024', all the rest of the lines that depend upon the value of column five divided by 1024 will not output that value to the screen, nor send it through awk.All the awk errors are meaningless, because it has nothing to work with. I hope this helps! 8) Share this post Link to post
chewmanfoo 0 Posted February 16, 2004 Yeah, but all variables in the shell are strings. That's why you can't say: Code: $x = 5$x = $x + 1echo $x expr returns the numeric (integer) value of an expression, like "$x + 1" But I still don't understand why this doesn't work... help? Share this post Link to post
twitten 0 Posted February 9, 2005 Close. Here's the answer: ls -l /proc/kcore | awk {'print $5/1024'} [root@corner ~]# ls -l /proc/kcore | awk {'print $5/1024'} 327676 Share this post Link to post