Head command queries


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Head command queries
# 1  
Old 06-24-2015
Head command queries

we have a file as below
HTML Code:
AREA,COUNTRY,RANK
A,MX,1
A,MX,2
A,MX,5
A,MX,8
A,IN,7
A,IN,5
A,IN,21
B,CN,6
B,CN,2
B,CN,8
B,CN,0
we need the TOP 2 RANK records for the combination of Area, Country as below. i know
Code:
head -2

, which gives top 2 records from file but not sure it lists based on specific fields. plz help me out.
HTML Code:
A,MX,8
A,MX,5
A,IN,21
A,IN,7
B,CN,8
B,CN,6
# 2  
Old 06-24-2015
Any attempt from your side?
# 3  
Old 06-25-2015
below is my code
Code:
sort -r file.txt > sort.txt
PRE_SIZE=""
content="middle.txt"
rm -f $content
rm -f final.txt
while read line
do
 dt=`echo $line | awk -F, '{print $1,$2}'`
 if [ "$PRE_SIZE" = "" ] || [ "$PRE_SIZE" = "$dt" ]
 then

 echo "$line" >> "${content}"
 PRE_SIZE="$dt"

 else

 cat $content | head -2 >> final.txt
 echo "$line" > "${content}"
 PRE_SIZE="$dt"

 fi

done < sort.txt
cat $content | head -2 >> final.txt

my code is creating temporary files, i feel they may degrade performance in case of huge file.
Any suggestions ???

Last edited by JSKOBS; 06-25-2015 at 06:59 AM..
# 4  
Old 06-25-2015
Try
Code:
{ head -1 file; tail -n+2 file | sort -t, -k1,2 -k3nr; } | awk -F, '!T[$1,$2]++ {P=NR+1} NR<=P'
AREA,COUNTRY,RANK
A,IN,21
A,IN,7
A,MX,8
A,MX,5
B,CN,8
B,CN,6

---------- Post updated at 11:19 ---------- Previous update was at 11:16 ----------

You may save a process and a pipe by taking advantage of the fact that once the header is found an printed, any later occurrence will be filtered out by awk:
Code:
{ head -1 file; sort -t, -k1,2 -k3nr file; } | awk -F, '!T[$1,$2]++ {P=NR+1} NR<=P'

This User Gave Thanks to RudiC For This Post:
# 5  
Old 06-25-2015
Thanks for the suggestion.
i will research on the awk code you provided Smilie
# 6  
Old 06-25-2015
You can achieve the same result with (recent) bash only:
Code:
head -1 file
tail -n+2 file | sort -t, -k1,2 -k3nr |
  while IFS=, read A C R X
    do [ "$TMP" != "$A,$C" ] && CNT=2
       [ $(( CNT-- )) -gt 0 ] && { echo $A,$C,$R      
                                   TMP="$A,$C"
                                 } 
    done

# 7  
Old 06-25-2015
Here is another awk approach:-
Code:
awk -F, '
        NR == 1 {
                print
                next
        }
        {
                idx = $1 FS $2
                if ( idx in A )
                {
                        if( A[idx] < $3 )
                        {
                                P[idx] = A[idx]
                                A[idx] = $3
                        }
                }
                else
                        A[idx] = $3
        }
        END {
                for ( k in A )
                        print k, A[k] RS k, P[k]
        }
' OFS=, file

Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Homework & Coursework Questions

UNIX head command not working?

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: Write a script that allows the user to print the first n lines or the last n lines of every file in the... (18 Replies)
Discussion started by: lukefrost96
18 Replies

2. Shell Programming and Scripting

Diff/head - not sure if this is the right command to use

Hi, I need some advise on whether there is a better way of doing what I am currently planning to do. Perhaps I should be using arrays instead of re-directing output to files? I need to use a tool/program named ADRCI provided by Oracle to remove trace files that it generates. Honestly it is... (1 Reply)
Discussion started by: newbie_01
1 Replies

3. Homework & Coursework Questions

Unix find and head command help

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: I've been stuck on this problem for 2 days now What command would you enter to list the first lines of all text... (11 Replies)
Discussion started by: partieboi37
11 Replies

4. Shell Programming and Scripting

shell script similar to the command HEAD

hello please if anyone can help me make a shell script similar to the command HEAD and TAIL THANKS (3 Replies)
Discussion started by: BELLA86
3 Replies

5. Shell Programming and Scripting

Imitate head and tail command script

Hi, I have been given assignment of 30 scripts out of which I was able to solve many, I need help with few out of which one asks to imitate head and tail command of unix without using the head and tail commands. Problem is stated below: Write an interactive shell script to imitate the head... (5 Replies)
Discussion started by: nutalk
5 Replies

6. Shell Programming and Scripting

head command with more than one file

Hi, I have the following problem. I have files with one column of data (let's say file1.dat, file2.dat...file6.dat), and I would like to record the first value of the column of each file into another file (let's name it fileall.dat), which would have the the six values, one in each column. I use to... (4 Replies)
Discussion started by: josegr
4 Replies

7. UNIX for Dummies Questions & Answers

alternative for head command

Hi friends,I am new to unix and this is really a dummy question.but please help me out. How to simulate head command without using head command??? also tail command too,also more command. it is given as a homework to do....please tell me how to do (2 Replies)
Discussion started by: nikhilneela
2 Replies

8. Shell Programming and Scripting

head command

Hi All, How can the head command be used to extract only a particular line. By default head -n filename displays the first n lines. I want only the nth line. I couldn't get it from forum search. Thanks, Sumesh (6 Replies)
Discussion started by: sumesh.abraham
6 Replies

9. UNIX for Dummies Questions & Answers

Simple Command (head) Question

Okay, this probably sounds dumb for anyone who knows the answer, but I'm completely lost. I have to use the head command to search a directory AND all of its subdirectories to display the first line of all .txt files. I know how to do this: head -1 ~/UnixCourse/*.txt, but that does not search the... (4 Replies)
Discussion started by: jbud
4 Replies
Login or Register to Ask a Question