Sort a las file keep the header as it is


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Sort a las file keep the header as it is
# 1  
Old 09-11-2015
Question Sort a las file keep the header as it is

I have several las files with a header and each file start Version and text and before the data starts end up with ~Ascii, then the numbers starts:
-------------------------------------------------------------------------
Code:
~Version
.....text....
~Ascii
2  abc  230   1 name
1  abc  400   1 name2
3  abb  350   2  name

----------------------------------------------------------------------------
What I want to do is to keep the header as it is and sort with the first column
the result to look something as following :
Code:
~Version
.....text....
~Ascii
1  abc  400   1 name2
2  abc  230   1 name
3  abb  350   2  name

and if it is possible to run for all files in one go, since all the files are *.las file?

thank
T

Last edited by vbe; 09-11-2015 at 09:58 AM.. Reason: code tags
# 2  
Old 09-11-2015
Operating inline of the file? Hard.

If you can tolerate a stream of output from processing the file twice, then ok. I'm assuming only one ~Ascii in the file.

Code:
sed -n '1,/^~Ascii/p' <test.las; sed  '1,/^~Ascii/d' <test.las | sort -k1,1n

# 3  
Old 09-13-2015
If you are saying that you want to sort all of the *.las files together into a single output file keeping the header from the 1st file and throwing away the other headers, you could try:
Code:
sed -n '1,/~Ascii/p;/~Ascii/q' *.las;sed '/~Version/,/~Ascii/d' *.las|sort -k1,1n

# 4  
Old 09-14-2015
keep each file sorted

Thanks Don/cjcox

I want to sort each file and the output should be new file for each file.
When I tried the one you post. It doesnot give me output file. And
each new file should keep the header and the data sorted.
# 5  
Old 09-14-2015
Assuming you want to sort the files in place and you don't have any hard links or non-default file modes or group-IDs you need to preserve in your .las files, a simple loop of the cjcox's suggestion should do what you want:
Code:
for file in *.las
do	sed -n '1,/~Ascii/p;/~Ascii/q' "$file" > "$file.$$" && \
	sed '1,/~Ascii/d' "$file" | sort -k1,1n >> "$file.$$" && \
	mv "$file.$$" "$file" || rm -f "$file.$$"
done

If you want new files created instead of replacing the original files, try:
Code:
for file in *.las
do	sed -n '1,/~Ascii/p;/~Ascii/q' "$file" > "$file.new"
	sed '1,/~Ascii/d' "$file" | sort -k1,1n >> "$file.new"
done


Last edited by Don Cragun; 09-14-2015 at 01:44 AM.. Reason: Simplify second sed script in both lists.
These 2 Users Gave Thanks to Don Cragun For This Post:
# 6  
Old 09-14-2015
More efficient with awk:
Code:
for file in *.las
do
  awk '(sort==1) {print | "sort -k1,1n"; next} ($1~/^~Version/) {sort=1} {print}' "$file" > "$file.$$" &&
  cp "$file.$$" "$file" &&
  rm -f "$file.$$"
done

Would be even shorter with perl, thanks to its -i option and internal sort.

Last edited by MadeInGermany; 09-14-2015 at 09:41 AM.. Reason: use the precise sort option
These 2 Users Gave Thanks to MadeInGermany For This Post:
# 7  
Old 09-14-2015
Quote:
Originally Posted by MadeInGermany
More efficient with awk:
Code:
for file in *.las
do
  awk '(sort==1) {print | "sort -k1,1n"; next} ($1~/^~Version/) {sort=1} {print}' "$file" > "$file.$$" &&
  cp "$file.$$" "$file" &&
  rm -f "$file.$$"
done

Would be even shorter with perl, thanks to its -i option and internal sort.
I'd have to do some benchmarking to see if sed, sed | sort is slower than using awk to invoke sh to invoke sort; since there are three fork() and exec family (or spawn()) calls either way; but I like the concept.

But, shouldn't:
Code:
($1~/^~Version/) {sort=1}

be:
Code:
($1~/^~Ascii/) {sort=1}

in your script?
This User Gave Thanks to Don Cragun For This Post:
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Sort without Header and Trailer

Hi , My UNIX system is SUN Solaris. I am trying to do a simple thing as described below. I have a PIPE delimited file that has header and trailer. So the file is something like below: Test1.txt looks like something below: field_data1|field_data2|and some more data --Header ... (5 Replies)
Discussion started by: Saanvi1
5 Replies

2. Shell Programming and Scripting

Sort and Split file with header and custom name

Hi, I am using SUN SOLARIS (SunOS sun4v sparc SUNW, T5240). I have a huge data file with header and trailer. This file gets used into an ETL process. ETL skips the header record (which is the first record of the file) and loads the rest of the record. The file can be delimited (comma,... (5 Replies)
Discussion started by: Saanvi1
5 Replies

3. UNIX for Dummies Questions & Answers

Sort a las file keep the header as it is

I have several las files with a header and each file start Version and text and before the data starts end up with ~Ascii, then the numbers starts: ------------------------------------------------------------------------- Code: ~Version .....text.... ~Ascii 2 abc 230 1 name 1 abc ... (1 Reply)
Discussion started by: tk2000
1 Replies

4. UNIX for Dummies Questions & Answers

How can i sort a .txt file without loosing the header information?

Hi, I'm trying to sort 2 different .txt tab delimited files with the command line: sort -k 1b,1 inputfile > outputfile But doing that i'm also sorting the header (that ends at the end of my file). How can i sort a .txt file without sorting the header but conserving the header in the... (3 Replies)
Discussion started by: alisrpp
3 Replies

5. UNIX for Dummies Questions & Answers

Sort a tab file with header.

How to sort a tab delimited file first on col1 and then on col2. Also I need to keep the header intact. file.txt val1 val2 val3 val4 a b c d m n o p e f g h i j k l ... (3 Replies)
Discussion started by: mary271
3 Replies

6. Shell Programming and Scripting

sort a report file having header and footer

I am having report file with header and footer . The details in between header and footer are separated by a pipe charater. I want to sort the file by considering multiple columns in between header and footer. pls help (4 Replies)
Discussion started by: suryanarayana
4 Replies

7. Shell Programming and Scripting

Ignore Header and Footer and Sort the data in fixed width file

Hi Experts, I want to Sort the data in fixed width file where i have Header and Footer also in file. I m using below commad to do the sort based on field satarting from 15 position to 17 position , but it is not ignoring the Header and Footer of the file while sorting. In the output i am... (5 Replies)
Discussion started by: sasikari
5 Replies

8. Shell Programming and Scripting

Simple sort with header

Hi, Please help with this problem. Somehow does not work for me. test.txt CHR SNP BP A1 C_A C_U A2 CHISQ P OR 19 rs10401969 19268718 C 222 890 T 0.03462 0.8524 0.9857 1 rs10873889 ... (4 Replies)
Discussion started by: genehunter
4 Replies

9. UNIX for Dummies Questions & Answers

Sort and uniq lines of a file while keeping a header line

So, I have a file that has some duplicate lines. The file has a header line that I would like to keep at the top. I could do this by extracting the header from the file, 'sort -u' the remaining lines, and recombine them. But they are quite big, so if there is a way to do it with a single... (1 Reply)
Discussion started by: Digby
1 Replies

10. UNIX for Dummies Questions & Answers

Add a header to a sort file instruction

Hello, I have a header which I have to add to a sorted file, however if I use cat header sortedfile > newfile, the operation takes 2 minutes as the sorted file is over 400mb. I have noticed that when I sort the 400mb unsorted file, this only takes 14 seconds to create the output. As... (2 Replies)
Discussion started by: clarcombe
2 Replies
Login or Register to Ask a Question