Help regarding shell script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help regarding shell script
# 8  
Old 01-31-2011
That is because your ls output is slightly different to mine (this is quite likely if you are on a different OS to me).

This is why I need the output of ls -ntra on your system so I could adjust the values of S (start) and L (length) for your system.

Again please use the [code] and [/code] tags around your posting of the ls -ntra output so the forum dosn't strip spaces as these are important in determining character positions for the columns.
# 9  
Old 01-31-2011
Hi Chubbler,

I couldn't access my server for some reason it is down I guess. I was trying for a while but I couldn't. But I for the awk script I was using in this fashion
Code:
[awk '{printf "%-12s %6s %-16s %-22s %8s %-4s %3s  \n", $1, $2, $3, $4, $5, $6, $7}']

Let me know if this should be good and can you please run me through your code about the function you declared and about the substrings you wrote. Sorry I'm finding bit tougher to get understand the process.

Thanks a lot for your help in this issue.

Last edited by Scott; 02-02-2011 at 06:59 PM.. Reason: Fixed code tags...
# 10  
Old 02-01-2011
Ok the function max(a,b) returns the maximum of two integers, ie highest of a or b.

FNR==1 {file++} This says if file line number is 1 (first line of the file) then increment file variable. This is used to test what file is being processed 1=/etc/group 2=/etc/passwd 3=ls output.

file==1 {g[$3]=$1;GW=max(GW,length($1));next} This loads the group file into the has array g[] with the group id (field 3) as the key and group name (field 1) as the data. It also uses the max(a,b) function to set GW as maximum length of groupname.

file==2 {p[$3]=$1;PW=max(PW,length($1));next} same as group above except hash array is p[] and PW is maximum login.

Code:
{ split(substr($0,S,L), ID, " ");
  printf "%s %-*s %-*s%s\n", substr($0,1,S-1), PW, p[ID[1]], GW, g[ID[2]],substr($0,S+L) }

This extracts the UID and GID from the ls output by fetching a substring from S to S+L and spliting it up using space seperators into ID[1] and ID[2] variables.
The string from 0-S is printed
The ID[1] (UID) field is looked up in the P[] hash array and the loginID is fetched, this is printed left justified to a width of PW.
The ID[2] (GID) field is looked up in the G[] hash array and the GroupName is fetched, this is printed left justified to a width of GW.
The the rest of the ls string from S+L to the end is printed.
# 11  
Old 02-01-2011
Hi,

This is what I get when I type ls -ntra
Code:
-rwxrwxr-x    1 1750560623 1750560023        110 Jan 27 12:21 list.sh
-rwxr-x---    1 1750560623 1750560023         80 Jan 28 09:25 .desk
drwxrwxr-x 201 0              1750560001        22324 Jan 29 10:12 uni_his


Last edited by Scott; 02-02-2011 at 07:00 PM..
# 12  
Old 02-01-2011
Damn, the length of the UID and GID fields are so long they have pushed out the alignment of all the following columns.

Best idea to fix this is to re-format all the fields up to field 5 and then use the raw ls string from there. The format ls uses for dates varies in width and number of elements depending on when the date is (e.g. older than 1 year or future dates also have YYYY). Not to mention filenames with spaces, etc. So it's best to just substring out the ls output after filesize and print it as-is.

I've added a function toend(str, n) that strips the first n space separated fields from the front of a string. We use toend($0,5) to get the date and filename part of the ls listing.

Code:
ls -nrt /my/path/to/directory | awk 'function max(a,b) {return a>b?a:b}
function toend(str,fld)
{ for(i=0; i<length(str); i++) {
    while(substr(str,i,1) != " " && i<length(str)) i++
    while(substr(str,i,1) == " " && i<length(str)) i++
    if (!--fld) return substr(str,i)
  }
  return ""
}
FNR==1 {file++}
file==1 {g[$3]=$1;GW=max(GW,length($1));next}
file==2 {p[$3]=$1;PW=max(PW,length($1));next}
{ split($0, L, " ")
  printf "%10s %3s %-*s %-*s %11s %s\n", L[1], L[2], PW, p[L[3]], GW, g[L[4]], L[5], toend($0,5)
}' FS=: /etc/group /etc/passwd -


Last edited by Chubler_XL; 02-01-2011 at 07:39 PM.. Reason: spelling
# 13  
Old 02-01-2011
Hi Chubler,

Thanks again. The main issue is I cant put it in my path, I have to put this code in .profile so that any user who types ls should have the longlist group name ( Just the groupname which i have mentioned functional-wireless- consumer) displayed.

And I have to put it as alias in .profile as,
Code:
[alias mike="/path/directory/UID/and the SCRIPT.sh"]

so that if any user who types in mike would have the complete long list groupname displayed.

Please let me know about the workaround on this.

Thanks
Mike

Last edited by Scott; 02-02-2011 at 07:00 PM..
# 14  
Old 02-01-2011
OK take the final script I posted above and replace the 1st line with these two:
Code:
#!/bin/sh
ls -n $@ | awk '

Save this to /path/directory/UID/newls.sh (for example)

Then in the user's .profile put alias mike="/path/directory/UID/newls.sh"

Now you should be able to do stuff like:
Code:
$ mike $HOME
$ mike -d /tmp
$ mike -rt $HOME


Last edited by Chubler_XL; 02-01-2011 at 09:38 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Shell script newbie- how to generate service log from shell script

Hi, I am totally a newbie to any programming languages and I just started an entry level job in an IT company. One of my recent tasks is to create a script that is able to show the log file of linux service (i.e. ntpd service) lets say, if I run my script ./test.sh, the output should be... (3 Replies)
Discussion started by: xiaogeji
3 Replies

2. Shell Programming and Scripting

Pass C shell array to another C shell script(csh) and shell(sh)

Dear Friends, Please help me on this my script name is send.csh In this i have written the statement like this set args = ( city state country price ) I want to pass this array to another c shell called receiver.csh. and i want to use it in this c shell or how to pass to... (2 Replies)
Discussion started by: SA_Palani
2 Replies

3. Shell Programming and Scripting

How to write config shell script to pass variables in master shell script?

Dear Unix gurus, We have a config shell script file which has 30 variables which needs to be passed to master unix shell script that invokes oracle database sessions. So those 30 variables need to go through the database sessions (They are inputs) via a shell script. one of the variable name... (1 Reply)
Discussion started by: dba1981
1 Replies

4. UNIX for Dummies Questions & Answers

How to write Config shell script to pass variables in master shell script?

Dear Unix gurus, We have a config shell script file which has 30 variables which needs to be passed to master unix shell script that invokes oracle database sessions. So those 30 variables need to go through the database sessions (They are inputs) via a shell script. one of the variable name... (1 Reply)
Discussion started by: dba1981
1 Replies

5. Shell Programming and Scripting

Unable to pass shell script variable to awk command in same shell script

I have a shell script (.sh) and I want to pass a parameter value to the awk command but I am getting exception, please assist. diff=$1$2.diff id=$2 new=new_$diff echo "My id is $1" echo "I want to sync for user account $id" ##awk command I am using is as below cat $diff | awk... (2 Replies)
Discussion started by: Ashunayak
2 Replies

6. Shell Programming and Scripting

Correct shell script to Call One shell script from another shell script

Hi All, I have new for shell scripting. Problem : I have one scrip at serv1 and path of server is /apps/dev/provimage/scripts and script name:extract_ancillary.bat. I need to call this script at server2(my working server) and execute at server2 . Please let me know how to build the... (5 Replies)
Discussion started by: Vineeta Nigam
5 Replies

7. Shell Programming and Scripting

call another shell script and pass parameters to that shell script

Hi, I basically have 2 shell scripts. One is a shell script will get the variable value from the user. The variable is nothing but the IP of the remote system. Another shell script is a script that does the job of connecting to the remote system using ssh. This uses a expect utility in turn. ... (2 Replies)
Discussion started by: sunrexstar
2 Replies

8. Shell Programming and Scripting

How to use ssh execute other shell script on other host (shell script include nohup)?

i want use ssh on the host01 to execute autoexec.sh on the host02 like following : host01> ssh host02 autoexec.sh autoexec.sh include nohup command like follwing : nohup /home/jack/deletedata.sh & after i execute ssh host02 autoexec.sh one the host01. i can't found deletedata.sh... (1 Reply)
Discussion started by: orablue
1 Replies

9. Shell Programming and Scripting

invoking a shell script inside cgi shell script

Hi, I have an HTML form through which I get some text as input. i need to run a shell script say script.sh inside a perl-cgi script named main_cgi.sh on the form input. I want to write the contents of the form in a file and then perform some command line operations like grep, cat on the text... (2 Replies)
Discussion started by: smriti_shridhar
2 Replies

10. Shell Programming and Scripting

How to Run a shell script from Perl script in Parent shell?

Hi Perl/UNIX experts, I have a problem in running a shell script from my perl script (auto.pl). I run the perl script using perl auto.pl from the shell prompt The shell script picks the files in "input" folder and procesess it. The shell script blue.sh has this code. export... (16 Replies)
Discussion started by: hifake
16 Replies
Login or Register to Ask a Question