Sort by id value in every two rows


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Sort by id value in every two rows
# 1  
Old 06-02-2019
Sort by id value in every two rows

Hello,
I am running ubuntu 14.04. My purpose is to sort below file according to value of id even though it contains alphanumeric strings inside double quote. File is not tab separated. I am not sure that can be done...
mydata
Code:
#INFO id="133 texas" logo="http://tx.yy.zz
http://11.22.48
#INFO id="21 michigan" logo="http://mx.yy.zz
http://11.22.55
#INFO id="18 london" logo="http://lx.yy.zz
http://11.22.77
#INFO id="299 paris" logo="http://px.yy.zz
http://11.22.00

Expected output:
Code:
#INFO id="18 london" logo="http://lx.yy.zz
http://11.22.77
#INFO id="21 michigan" logo="http://mx.yy.zz
http://11.22.55
#INFO id="133 texas" logo="http://tx.yy.zz
http://11.22.48
#INFO id="299 paris" logo="http://px.yy.zz
http://11.22.00

What I tried:
Code:
awk '{print int((NR-1)/2), $0}' mydata | sort -n -k2,2 | cut -f2- -d' '


Thank you
Boris

EDIT:
Hello,
I have solved somehow with a bit long way but it's okay now.
Code:
for i in {10..900}
do
echo "id=\"$i"
done > output

Then with grep and while read -r line loop.

Thanks
Boris

Last edited by baris35; 06-02-2019 at 06:40 PM.. Reason: solved
# 2  
Old 06-02-2019
You were very close with your awk, sort, cut pipeline:

Code:
awk -F\" 'NR%2{printf "%s\t%s\t",$2,$0; next }1' mydata |
  sort -n | cut -f2- | tr '\t' '\n'

This User Gave Thanks to Chubler_XL For This Post:
# 3  
Old 06-02-2019
Hi.

Noting that in this specific dataset, the "#" is essentially the record separator, we can add a dummy record at the top, and use some of the features of a flexible alternative sorting code msort.

Here is a demonstration script with results:
Code:
#!/usr/bin/env bash

# @(#) s1       Demonstrate sort of multi-line record, msort, sed

# Utility functions: print-as-echo, print-line-with-visual-space, debug.
# export PATH="/usr/local/bin:/usr/bin:/bin"
LC_ALL=C ; LANG=C ; export LC_ALL LANG
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
em() { pe "$*" >&2 ; }
db() { ( printf " db, ";for _i;do printf "%s" "$_i";done;printf "\n" ) >&2 ; }
db() { : ; }
C=$HOME/bin/context && [ -f $C ] && $C msort sed

FILE=${1-data2}

pl " Input data file $FILE:"
head $FILE

pl " Results:"
msort -q -r "#" -d '"' -n 2,2 -c h $FILE |
tee t1 |
sed '1d;$d'

pl " Temporary file t1:"
head -20 t1

exit 0

producing:
Code:
$ ./s1

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 3.16.0-7-amd64, x86_64
Distribution        : Debian 8.11 (jessie) 
bash GNU bash 4.3.30
msort 8.53
sed (GNU sed) 4.2.2

-----
 Input data file data2:
# junk "0 "
#INFO id="133 texas" logo="http://tx.yy.zz
http://11.22.48
#INFO id="21 michigan" logo="http://mx.yy.zz
http://11.22.55
#INFO id="18 london" logo="http://lx.yy.zz
http://11.22.77
#INFO id="299 paris" logo="http://px.yy.zz
http://11.22.00

-----
 Results:
#INFO id="18 london" logo="http://lx.yy.zz
http://11.22.77
#INFO id="21 michigan" logo="http://mx.yy.zz
http://11.22.55
#INFO id="133 texas" logo="http://tx.yy.zz
http://11.22.48
#INFO id="299 paris" logo="http://px.yy.zz
http://11.22.00

-----
 Temporary file t1:
 junk "0 "
#INFO id="18 london" logo="http://lx.yy.zz
http://11.22.77
#INFO id="21 michigan" logo="http://mx.yy.zz
http://11.22.55
#INFO id="133 texas" logo="http://tx.yy.zz
http://11.22.48
#INFO id="299 paris" logo="http://px.yy.zz
http://11.22.00
#

Note that the raw results -- file t1 -- has a beginning and ending line that should be removed, which is what the sed command does. The sorting mode is hybrid, a combination of alphabetic and numeric.

If you have any odd sorting requirements that the standard sort does not address, it may be useful to consider msort.

Some more information on msort:
Code:
msort   sort records in complex ways (man)
Path    : /usr/bin/msort
Version : 8.53
Type    : ELF 64-bit LSB executable, x86-64, version 1 (SYS ...)
Help    : probably available with -h,--help
Repo    : Debian 8.11 (jessie) 
Home    : http://www.billposer.org/Software/msort.html (pm)

Best wishes ... cheers, drl
These 2 Users Gave Thanks to drl For This Post:
# 4  
Old 06-03-2019
Try also
Code:
$ paste -sd"\t\n" file | sort -nt\" -k2 | tr $'\t' $'\n'
#INFO id="18 london" logo="http://lx.yy.zz
http://11.22.77
#INFO id="21 michigan" logo="http://mx.yy.zz
http://11.22.55
#INFO id="133 texas" logo="http://tx.yy.zz
http://11.22.48
#INFO id="299 paris" logo="http://px.yy.zz
http://11.22.00

These 4 Users Gave Thanks to RudiC For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Sort tab delimited file according to which rows have missing values

Hello! I have a tab delimited file with values in three columns. Some values occur in all three columns, other values are present in only one or two columns. I would like to sort the file so that rows with no missing values come first, rows with one missing values come next, and rows with two... (9 Replies)
Discussion started by: MBarrett1213
9 Replies

2. Shell Programming and Scripting

Moving or copying first rows and last rows into another file

Hi I would like to move the first 1000 rows of my file into an output file and then move the last 1000 rows into another output file. Any help would be great Thanks (6 Replies)
Discussion started by: kylle345
6 Replies

3. UNIX for Dummies Questions & Answers

Converting Columns To Rows Sort Of

Hi I'm a UNIX awk and sed novice at best. I'm trying to creat a .csv file so it can be graphed in Excel. Tried various xargs, awk, sed and paste but just can't seem to get the data to line up. Not sure if this is beyond for a question in these forums. Any help would greatly be appreciated. Have... (4 Replies)
Discussion started by: jimmyf
4 Replies

4. Shell Programming and Scripting

Sort help: How to sort collected 'file list' by date stamp :

Hi Experts, I have a filelist collected from another server , now want to sort the output using date/time stamp filed. - Filed 6, 7,8 are showing the date/time/stamp. Here is the input: #---------------------------------------------------------------------- -rw------- 1 root ... (3 Replies)
Discussion started by: rveri
3 Replies

5. UNIX for Dummies Questions & Answers

merging rows into new file based on rows and first column

I have 2 files, file01= 7 columns, row unknown (but few) file02= 7 columns, row unknown (but many) now I want to create an output with the first field that is shared in both of them and then subtract the results from the rest of the fields and print there e.g. file 01 James|0|50|25|10|50|30... (1 Reply)
Discussion started by: A-V
1 Replies

6. UNIX for Advanced & Expert Users

Script to sort the files and append the extension .sort to the sorted version of the file

Hello all - I am to this forum and fairly new in learning unix and finding some difficulty in preparing a small shell script. I am trying to make script to sort all the files given by user as input (either the exact full name of the file or say the files matching the criteria like all files... (3 Replies)
Discussion started by: pankaj80
3 Replies

7. Shell Programming and Scripting

Split single rows to multiple rows ..

Hi pls help me out to short out this problem rm PAB113_011.out rm: PAB113_011.out: override protection 644 (yes/no)? n If i give y it remove the file. But i added the rm command as a part of ksh file and i tried to remove the file. Its not removing and the the file prompting as... (7 Replies)
Discussion started by: sri_aue
7 Replies

8. Shell Programming and Scripting

Sort the multi column rows

abc xyz - - - - - - - - - - - How to sort the second column in ascending order. (2 Replies)
Discussion started by: sandy1028
2 Replies

9. Shell Programming and Scripting

Deleting specific rows in large files having rows greater than 100000

Hi Guys, I need help in modifying a large text file containing more than 1-2 lakh rows of data using unix commands. I am quite new to the unix language the text file contains data in a pipe delimited format sdfsdfs sdfsdfsd START_ROW sdfsd|sdfsdfsd|sdfsdfasdf|sdfsadf|sdfasdf... (9 Replies)
Discussion started by: manish2009
9 Replies

10. Shell Programming and Scripting

Sort, group rows

I wrote script in bash which generates this report: User1,admin,rep,User2,shell,path1,x1,r1 User2,admin,rep,User7,shell,path1,x1,r1 User3,admin,rep,User4,shell,path1,x1,r1 User4,admin,rep,User3,shell,path1,x1,r1 User5,admin,rep,User1,shell,path1,x1,r1 User6,admin,rep,User5,shell,path1,x1,r1... (6 Replies)
Discussion started by: patrykxes
6 Replies
Login or Register to Ask a Question