Shell Script: Sorting by column using grep/awk

 
Thread Tools Search this Thread
Homework and Emergencies Homework & Coursework Questions Shell Script: Sorting by column using grep/awk
# 1  
Old 03-15-2013
Shell Script: Sorting by column using grep/awk

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!

1. The problem statement, all variables and given/known data:
You will write a script that will read a tab-separated file that contains the names of all 50 states & Washington DC, their populations, their land areas and their population densities, which is used to order the current list. The script will ask the user if they would like to have a new file sorted alphabetically by state name, by land area or by population. If they select by name or population, the file will output the state name, then the population, then the land area. If they select by land area, the file will output the state name, then the land area, then the population. The script will save the new file either as “states_alpha.txt”, “states_land.txt” or “states_pop.txt”, depending on the choice selected by the user.



2. Relevant commands, code, scripts, algorithms:
grep, awk


3. The attempts at a solution (include all code and scripts):
echo "How would you like the fifty_states.txt file to be sorted?
1 ) Alphabetically
2 ) By Land Area
3 ) By Population
Enter your choice: " choice

if $choice=1
grep '^[A-Z]' fifty_states.txt | awk '{ print $1, $2, $3 }' fifty_states.txt > states_alpha.txt

This does not work...I am not sure where to go from here.


4. Complete Name of School (University), City (State), Country, Name of Professor, and Course Number (Link to Course):
Jackson Community College, Jackson MI, USA, M. Brinkman, CIS106


Note: Without school/professor/course information, you will be banned if you post here! You must complete the entire template (not just parts of it).
# 2  
Old 03-15-2013
Use the sort command for sorting.

To sort a file alphabetically on the first column in ascending order:

Code:
sort -k 1,1 < inputfile > outputfile

-k works like -k startcolumn,endcolumn which is why 1 is given twice. It's more complex than this but this is its basic usage.

Add the -r switch to sort in descending order.

Add the -n switch to sort numbers.

See man sort for details.
# 3  
Old 03-15-2013
You can substring with decimals, too: -k 1.3,1.9
# 4  
Old 03-15-2013
tburns517,
In addition to what Corona688 has already said, you also need to note that the echo command just copies strings to its output; it doesn't read a response from its input. To get input from the user, you'll probably want to use the read utility. Note that there is probably a section 1 man page for the read utility and a section 2 man page for the read() function (or system call) on your system. Try:
Code:
man 1 read

to get the read utility's man page.

You'll also need to check the syntax of the if command and the test (or [ ) command for the shell you're using. You should be able to find details on the shell's man page. Presumably for a class like this, your shell would be sh, ksh, or bash. By now, you can guess how to find your shell's man page.

- Don
# 5  
Old 03-16-2013
I need help really quick, this is due in an hour. Here is my new code, I just need to figure out how to get the user input to do the correct command, which is why I left the "if choice" blank...or should it be "if $choice" ?

read -p "How would you like the file to be sorted?
1) Alphabetically by name
2) By Land Area
3) By Population
Enter number choice here: " choice
read choice

if choice
then
awk '{ print $2, $3, $4 }' fifty_states.txt > states_alpha.txt
sort states_alpha.txt
fi

if choice
then
awk '{ print $2, $3, $4 }' fifty_states.txt > states_land.txt
sort -k +1 states_land.txt
fi

if choice
then
awk '{ print $2, $4, $3 }' fifty_states.txt > states_pop.txt
sort -k +1 states_pop.txt
fi
# 6  
Old 03-16-2013
Quote:
Originally Posted by tburns517
I need help really quick, this is due in an hour. Here is my new code, I just need to figure out how to get the user input to do the correct command, which is why I left the "if choice" blank...or should it be "if $choice" ?

read -p "How would you like the file to be sorted?
1) Alphabetically by name
2) By Land Area
3) By Population
Enter number choice here: " choice
read choice

if choice
then
awk '{ print $2, $3, $4 }' fifty_states.txt > states_alpha.txt
sort states_alpha.txt
fi

if choice
then
awk '{ print $2, $3, $4 }' fifty_states.txt > states_land.txt
sort -k +1 states_land.txt
fi

if choice
then
awk '{ print $2, $4, $3 }' fifty_states.txt > states_pop.txt
sort -k +1 states_pop.txt
fi
We are not going to do your homework for you.
I suggest again that you look at the man page for the test command so you can craft your if statements to look something like:
Code:
if test "$choice" some condition check

or
Code:
if [ "$choice" some condition check ]

# 7  
Old 03-16-2013
Do you see an issue with this? I got it to work without errors, but I am not getting an output at all, as in, the file is not being created.

if [ "$choice" = "1" ]
then
awk -F"\t" '{ print $2, $3, $4 }' fifty_states.txt | sort > states_alpha.txt
fi

Last edited by tburns517; 03-16-2013 at 01:52 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Need awk or Shell script to compare Column-1 of two different CSV files and print if column-1 matche

Example: I have files in below format file 1: zxc,133,joe@example.com cst,222,xyz@example1.com File 2 Contains: hxd hcd jws zxc cst File 1 has 50000 lines and file 2 has around 30000 lines : Expected Output has to be : hxd hcd jws (5 Replies)
Discussion started by: TestPractice
5 Replies

2. Shell Programming and Scripting

awk script to append suffix to column when column has duplicated values

Please help me to get required output for both scenario 1 and scenario 2 and need separate code for both scenario 1 and scenario 2 Scenario 1 i need to do below changes only when column1 is CR and column3 has duplicates rows/values. This inputfile can contain 100 of this duplicated rows of... (1 Reply)
Discussion started by: as7951
1 Replies

3. Shell Programming and Scripting

How to awk or grep the last column in file when date on column contains spaces?

Hi have a large spreadsheet which has 4 columns APM00111803814 server_2 96085 Corp IT Desktop and Apps APM00111803814 server_2 96085 Corp IT Desktop and Apps APM00111803814 server_2 96034 Storage Mgmt Team APM00111803814 server_2 96152 GWP... (6 Replies)
Discussion started by: kieranfoley
6 Replies

4. Shell Programming and Scripting

Grep/awk part of info of a column

I have a question that I am at a loss to solve. I have 3 column tab-separated data, such as: abs nmod+n+n-commitment-n 349.200023 abs nmod+n+n-a-commitment-n 333.306429 abs into+ns-j+vn-pass-rb-divide-v 295.57316 abs nmod+n+ns-commitment-n 182.085018 abs nmod+n+n-pledge-n ... (2 Replies)
Discussion started by: owwow14
2 Replies

5. UNIX for Dummies Questions & Answers

Problem with sorting in shell script

Hi, I have the following list: 42A 42AA 42B 42BB 42AAA 42BBB 49A 49AA 49B 49AAA 49BB I need it to be sorted as following: 42A 42B (2 Replies)
Discussion started by: sairamtejaswi
2 Replies

6. Shell Programming and Scripting

AWK script to create max value of 3rd column, grouping by first column

Hi, I need an awk script (or whatever shell-construct) that would take data like below and get the max value of 3 column, when grouping by the 1st column. clientname,day-of-month,max-users ----------------------------------- client1,20120610,5 client2,20120610,2 client3,20120610,7... (3 Replies)
Discussion started by: ckmehta
3 Replies

7. Shell Programming and Scripting

grep/awk column or variable?

Hi, I'm running via PuTTY, in a BASH shell to do my work. I'm running calculations where steps are reported like this every 100 steps: NSTEP = 249900 TIME(PS) = 249.900 TEMP(K) = 299.94 PRESS = 21.1 Etot = -12912.5557 EKtot = 4996.8780 EPtot = -17909.4336 ... (6 Replies)
Discussion started by: Oriksagtaria
6 Replies

8. Shell Programming and Scripting

AWK/GREP sorting help

hi everyone, I am kind of new to this forum. I need help in sorting this data out accordingly, I am actually doing a traceroute application and wants my AS path displayed in front of my address like this; 192.168.1.1 AS28513 AS65534 AS5089 AS5089 .... till the last AS number and if possible sort... (8 Replies)
Discussion started by: sam127
8 Replies

9. Shell Programming and Scripting

Shell script / Grep / Awk to variable and Loop

Hi, I have a text file with data in that I wish to extract, assign to a variable and process through a loop. Kind of the process that I am after: 1: Grep the text file for the values. Currently using: cat /root/test.txt | grep TESTING= | awk -F"=" '{ a = $2 } {print a}' | sort -u ... (0 Replies)
Discussion started by: Spoonless
0 Replies

10. Shell Programming and Scripting

grep, awk, typeset in a shell script..

For e.g I have a file named "relation" which has three coloums i.e JOHN MARY JACK PETE ALISIA JONNY TONY JACKIE VICTOR If I do grep -w 'JOHN' relation | awk '{print""$1" is husband of "$2" & father of "$3""}' It gives out JOHN i husband of MARY & father of JACK (which is desired... (7 Replies)
Discussion started by: nick_25
7 Replies
Login or Register to Ask a Question