Visit The New, Modern Unix Linux Community


Sorting help with bash


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Sorting help with bash
# 1  
Sorting help with bash

Using Mac OS 10.15.x Catalina

Consider the following CSV:

Code:
Name Error Count Severity Info
Server1 not found 1025 MAJOR some info here
Server4 some error 1 MAJOR some info here
Server 2 another error 587 MINOR more info
Server3 not found 15 MAJOR more info

I have some code to sort on the Severity, however, I can't get the numerical sort on the count to work correctly. I try to sort it numerically first, and then by severity, but the numerical portion doesn't seem to work. Here is what I have:

Code:
sort -k3,1 "$1";( grep -i "name" "$1"; grep "CRITICAL" "$1"; grep "MAJOR" "$1"; grep "HIGH" "$1"; grep "MEDIUM" "$1"; grep "MINOR" "$1"; grep "LOW" "$1" | sort ) > $OUT

RESULTS: It sorts on severity just fine, but doesn't sort on Count. Let me know if that doesn't make sense.

Desired outcome (notice the Count is from greatest to least within each sub-set of Severity)
Code:
Name Error Count Severity Info
Server1 not found 1025 MAJOR some info here
Server3 not found 15 MAJOR more info
Server4 some error 1 MAJOR some info here
Server 2 another error 587 MINOR more info

# 2  
Hi
I am not familiar with Mac OS but you can try the following code or create your own based on it.
I think the principle is clear
Code:
for i in Name CRITICAL MAJOR HIGH MEDIUM MINOR LOW; do
        grep "$i" file | sort -k4,4nr
done

--- Post updated at 16:03 ---

Code:
head -1 file
for i in CRITICAL MAJOR HIGH MEDIUM MINOR LOW; do
        grep "$i" file | sort -k4nr
done


Last edited by nezabudka; 03-11-2020 at 09:08 AM..
# 3  
Thank you for the suggestion. It doesn't work 100%. I cut out sensitive fields, but this gives you an idea of the results:

CODE (Note the first filed is to just grab the title/headers of the columns):
Code:
for i in RecommendedActions CRITICAL MAJOR HIGH MEDIUM MINOR LOW; do
  grep "$i" "$1" | sort -k3,3nr >> $OUT
done

RESULT:
Code:
ErrorCount	Severity
372	MAJOR
578	MAJOR
31249	MAJOR
8306	MAJOR
16	HIGH
17	HIGH
3236	MINOR
367	MINOR
2	MINOR
19	MINOR
85721	LOW
564	LOW
729	LOW
128424	LOW
220	LOW
25516	LOW
5	LOW
343080	LOW
3705	LOW
158	LOW
92	LOW

# 4  
Turn on the option sort -k3,3nr --debug and see where the error is

--- Post updated at 19:00 ---

Code:
head -5 file | sort -k3,3nr --debug

# 5  
With a help file in $SEV defining severity order in the form


Code:
1 CRITICAL 
3 HIGH 
6 LOW
2 MAJOR 
4 MEDIUM 
5 MINOR



try also


Code:
grep -Eo "[0-9]* *(CRITICAL|MAJOR|HIGH|MEDIUM|MINOR|LOW)" $1 | sort -k2 -k1.1nr | join -j2 - $SEV | sort -k3 -k2nr | cut -f1,2 -d" "

# 6  
I didn't know how to interpret the debug output. I tried throwing in -t "," into my sort and now it is working. Don't know why I need to do that, as I thought it was the default, but it seems to work with that in there..... (don't have commas anywhere in this doc other than as field separators)

Code:
sort -t "," -k3,3nr "$1" > $OUT
for i in RecommendedActions CRITICAL MAJOR HIGH MEDIUM MINOR LOW; do
  grep "$i" "$OUT"  >> $OUT2
done


I appreciate all of the help. Thank you
# 7  
Ok, The right time to learn how to use the '--debug' option?
Code:
sort -k3nr --debug <<<"Server1 not found 1025 MAJOR some info here"

Code:
sort: text ordering performed using simple byte comparison
sort: key 1 is numeric and spans multiple fields
Server1 not found 1025 MAJOR some info here
            ^ no match for key
___________________________________________

mismatch!
Code:
sort -k4nr --debug <<<"Server1 not found 1025 MAJOR some info here"

Code:
sort: text ordering performed using simple byte comparison
sort: key 1 is numeric and spans multiple fields
Server1 not found 1025 MAJOR some info here
                  ____
___________________________________________

You see, a little dash appeared under the number?
This first key sorting rule worked. But there are more clues
Code:
sort -k4,4nr --debug <<<"Server1 not found 1025 MAJOR some info here"

Code:
sort: text ordering performed using simple byte comparison
Server1 not found 1025 MAJOR some info here
                  ____
___________________________________________

That's ok

--- Post updated at 22:18 ---
Also
Try it like this
Code:
head -1 file
for i in CRITICAL MAJOR HIGH MEDIUM MINOR LOW; do
        grep "$i" file | sort -k4
done

Sorry, bad advice

Last edited by nezabudka; 03-11-2020 at 03:31 PM..
This User Gave Thanks to nezabudka For This Post:

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #95
Difficulty: Easy
SMH is an Internet expression that stands for 'shake my head' or 'shaking my head'.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

In Bash shell - the ps -ef shows only the /bin/bash but the script name is not displayed

In Bash shell - the ps -ef shows only the /bin/bash but the script name is not displayed ? Is there any way to get the script names for the process command ? --- Post updated at 08:39 AM --- in KSH (Korn Shell), my command output shows the script names but when run in the Bash Shell... (3 Replies)
Discussion started by: i4ismail
3 Replies

2. Shell Programming and Scripting

Different behavior between bash shell and bash script for cmd

So I'm trying to pass certain json elements as env vars and use them later on in a script. Sample json: JSON='{ "Element1": "file-123456", "Element2": "Name, of, company written in, a very weird way", "Element3": "path/to/some/file.txt", }' (part of the) script: for s... (5 Replies)
Discussion started by: da1
5 Replies

3. Shell Programming and Scripting

How to run several bash commands put in bash command line?

How to run several bash commands put in bash command line without needing and requiring a script file. Because I'm actually a windows guy and new here so for illustration is sort of : $ bash "echo ${PATH} & echo have a nice day!" will do output, for example:... (4 Replies)
Discussion started by: abdulbadii
4 Replies

4. Shell Programming and Scripting

Bash to select text and apply it to a selected file in bash

In the bash below I am asking the user for a panel and reading that into bed. Then asking the user for a file and reading that into file1.Is the grep in bold the correct way to apply the selected panel to the file? I am getting a syntax error. Thank you :) ... (4 Replies)
Discussion started by: cmccabe
4 Replies

5. Shell Programming and Scripting

Recursive File Renaming & Natural Sorting (Bash)

NB! I have already started a thread on this subject on ComputerHope (with the thread title "Recursive File Renaming & Logical Sorting"). However, on ComputerHope they are perhaps more specialized in Windows Command Prompt, and not that much in shell scripts for Bash (I guess). I have a bulk... (1 Reply)
Discussion started by: JewzeyfGhewbelz
1 Replies

6. Shell Programming and Scripting

Using arrays in bash using strings to bash built-in true

I have the following code and for some reason when I call the program using /home/tcdata/tatsh/trunk/hstmy/bin/bash/raytrac.bash --cmod=jcdint.cmod I get hasArgument = hasArgument = true Somehow the array element is returning even though I have not chosen the option. ... (41 Replies)
Discussion started by: kristinu
41 Replies

7. Shell Programming and Scripting

how to make your bash script run on a machine with csh and bash

hi, i have a script that runs on bash and would like to run it on a machine that has csh and bash. the default setting on that machine is csh. i dont want to change my code to run it with a csh shell. is there any way i can run the script (written in bash) on this machine? in other words is there... (3 Replies)
Discussion started by: npatwardhan
3 Replies

8. Shell Programming and Scripting

Is there any better way for sorting in bash/awk

Hi, I have a file which is:- 1 6 4 8 2 3 2 1 9 3 2 1 3 3 5 6 3 1 4 9 7 8 2 3 I would like to sort from field $2 to field $6 for each of the line to:- 1 2 3 4 6 8 2 1 1 2 3 9 3 1 3 3 5 6 4 2 3 7 8 9 I came across this Arrays on example 26-6. But it is much complicated. I am... (7 Replies)
Discussion started by: ahjiefreak
7 Replies

9. Shell Programming and Scripting

bash and ksh: variable lost in loop in bash?

Hi, I use AIX (ksh) and Linux (bash) servers. I'm trying to do scripts to will run in both ksh and bash, and most of the time it works. But this time I don't get it in bash (I'm more familar in ksh). The goal of my script if to read a "config file" (like "ini" file), and make various report.... (2 Replies)
Discussion started by: estienne
2 Replies

10. Shell Programming and Scripting

passing variable from bash to perl from bash script

Hi All, I need to pass a variable to perl script from bash script, where in perl i am using if condition. Here is the cmd what i am using in perl FROM_DATE="06/05/2008" TO_DATE="07/05/2008" "perl -ne ' print if ( $_ >="$FROM_DATE" && $_ <= "$TO_DATE" ) ' filename" filename has... (10 Replies)
Discussion started by: arsidh
10 Replies

Featured Tech Videos