CARMINATISOUND
CARMINATISOUND

Reputation: 43

Using the result of grep to sort files

I need to sort a file based on the results of grep. Example:

cat cuts.txt | grep -P '(?<=[+]).*(?=[+])'
text +124+ text
text +034+ text
text +334+ text

How do I sort lines in crescent order based on what grep found?

Upvotes: 3

Views: 1494

Answers (1)

RavinderSingh13
RavinderSingh13

Reputation: 133528

Could you please try following, written and tested with shown samples. Considering that you need to sort by 2nd field's increasing values. Since OP mentioned +digits+ values could be present anywhere in line hence coming with this Generic solution here.

grep -P '(?<=[+]).*(?=[+])' Input_file |
awk '
  match($0,/\+[0-9]+\+/){
    print substr($0,RSTART,RLENGTH),$0
  }
'  | sort -k1.2 | cut -d' ' -f2-

Output will be as follows.

text +034+ text
text +124+ text
text +334+ text

Logical explanation: After passing grep command's output to awk command using regex in awk command to find +digits+ values in lines and printing 1st matched values then whole line, by doing this it will be easy for sort to why because we always get to sort now on 1st field. Once we do sorting on first field then use cut to get everything from 2nd field onwards, why because 1st field is an extra added field by awk command to make sort easier and not needed in actual output.

Also we need NOT to use a separate cat command to this one, we could directly read Input_file by grep command.

Upvotes: 4

Related Questions