Weird: unexpected result after piping a sort


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Weird: unexpected result after piping a sort
# 8  
Old 01-28-2013
This is as it should be. Try the following
Code:
rm mylisting
ls -l | sort > mylisting
vi mylisting

And look at the size of mylisting. This should give a clue of what is going on.
# 9  
Old 01-28-2013
Thanks.
Like I said, to me the problem is not to get the list. I am sure I would find other ways, like the one you mention.

The issue is to understand exactly why this is a normal result and expected.

-S
# 10  
Old 01-28-2013
What I mean is that if you use ls -l instead of ls and look at whay is inside mylisting you'll notice that the size of the file at the time of the ls -l command is 0.
# 11  
Old 01-28-2013
Code:
$ rm * ; touch a b c ; bash -c "ls | sort > out" ; cat out
a
b
c
$ rm * ; touch a b c ; bash -c "ls | sort > out" ; cat out
a
b
c
$ rm * ; touch a b c ; bash -c "ls | sort > out" ; cat out
a
b
c
out
$

Sometimes I get it. Sometimes I don't. To implement the pipeline, the shell has two processes, one for ls and one for sort. There is no guarantee that the ls process will complete the directory read before the sort process opens its output file. It's a race condition that results in variable results. put the output file in another directory.

If you don't get variable results, try other shells or other platforms with more cpu's available. Or vary the other workload that the system is running while it runs your pipeline.

Anyway, ls sorts its output by itself.
This User Gave Thanks to Perderabo For This Post:
# 12  
Old 01-28-2013
@Scrutinizer:

Zero size of file initialy.
I get the idea I think... However, it's still counterintuitive.
... or not.
I guess the system creates the file first in order to store the list.
-S

---------- Post updated at 03:18 PM ---------- Previous update was at 03:15 PM ----------

@ Perderabo:
I see....
Thanks !
# 13  
Old 01-28-2013
if you redirect the output of ls into a file it seems to always add the name of the file you redirected into the output.
You can try this:

Code:
 ls|sort | grep -v mylisting > mylisting

I think redirections are always determined before actual command execution takes place; after `ls` is executed mylisting is already present in the output before the pipe to sort.
# 14  
Old 01-28-2013
The OP was interested in why this phenomenon occurs, rather than the list itself. As Perderabo pointed out about this particular case, the output of ls without operands is sorted by default, so
Code:
ls > mylisting

should provide the right result in this case...
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Unexpected result from awk

Hello, Giving those commands: cat > myfile 1 2 3 ^D cat myfile | awk '{ s=s+$1 ; print s}' The output is: 1 3 6 It seems like this command iterates each time on a different row so $1 is the first field of each row.. But what caused it to refer to each row ?. What I mean... (3 Replies)
Discussion started by: uniran
3 Replies

2. UNIX for Beginners Questions & Answers

Sort by record column, Compare with conditons and export the result

Hello, I am new to Unix and would like to seek a help, please. I have 2 files (file_1 and file_2), I need to perform the following actions. 1 ) Sort the both file by the column 26-36 (which is Invoice number) what is sort command with the column sort? 2) Compare the file_1.sorted and... (3 Replies)
Discussion started by: Usagi
3 Replies

3. Emergency UNIX and Linux Support

How to take awk result out (piping to other program)?

Hi! all here is my code which is working fine no errors but I want to know how to take result and input to other program awk 'FNR==1{i++}{LC=NR} {for(k=1; k<=NF; k++) A=$k} END{for (i=1;i<=LC;i++) { for(j=1;j<=LC;j++) if(A=='$UID' && A>='$MX'+A &&... (7 Replies)
Discussion started by: Akshay Hegde
7 Replies

4. Shell Programming and Scripting

How to sort grep result based on timestamp?

Hi, Trying to sort grep result based on timestamp of the filename. I have the following result and want to sort them on timestampgrep -i 'ERROR' *log*2013* s_m_xxx_xxx_xxx_xxx_xxxx.log.20130906092431:TRANSF_1_1_1> DBG_21216 Finished transformations for Source Qualifier . Total errors ... (5 Replies)
Discussion started by: bobbygsk
5 Replies

5. UNIX for Advanced & Expert Users

Weird "sort" behavior

Hi, I'm trying to sort a text file "test": S12 S_S12 S_S1_12 S15 S_N15 S_N1_15 By "sort test", I get: S12 S15 S_N1_15 S_N15 S_S1_12 S_S12 It seems weird: Comparing Line 2 and Line 3, it must be that '-' is bigger than '1'; however, comparing Line 3 and Line 4, it seems that... (3 Replies)
Discussion started by: intermilan
3 Replies

6. Shell Programming and Scripting

shell script - unexpected result

I hv a file --am executing a script which is giving me unexpected results COntents of file: f1 CMT_AP1_CONT:/opt/sybase/syboc125:150:ASE12_5::Y:UX: CMT_AP1:/opt/sybase/syboc125:150:ASE12_5::Y:UX f1.tmp CMT_AP1_CONT:/opt/sybase/syboc125:150:ASE12_5::Y:UX:... (2 Replies)
Discussion started by: rajashekar.y
2 Replies

7. Shell Programming and Scripting

sort piping to awk array - help please

Hi I'm just learning programming and need some help. I've taken a data file which has a list of numbers eg: 3 5 32 533 13 2 And I've used sort -n and to sort and then piped it to awk to arrange into an array. #!/bin/sh sort -n data.txt | awk ' { array=$1 } (4 Replies)
Discussion started by: EL_Chemso
4 Replies

8. Shell Programming and Scripting

Unexpected sed result.

I am in the process of writing a script to change the grub password in the grub.conf file. I thought I had it figured out, but am running into an a problem I can't put my finger on. Command I am running when I find that the grub.conf file contains "password --md5". sed... (1 Reply)
Discussion started by: viRaven
1 Replies

9. Shell Programming and Scripting

unexpected pipeline result with find -exec

Hi All, I probably miss something fundamental here. I want to rename a bunch of files in subdirectories (that might contain white spaces) with names that are related. I thought following could do the job: find . -name *.sh -exec mv {} $(echo {} | sed -e 's/0/1/g') \; Now to be able to... (5 Replies)
Discussion started by: blued
5 Replies

10. Shell Programming and Scripting

sort unexpected error?

I have the following script: mysort.sh: #!/bin/ksh for i in `ls` sort -bfu $i > sort_$i wait mv sort_$i $i wait done exit 0 I get the following error: mysort.sh: syntax error at line 3 : `sort' unexpected Does anybody know what I am missing here. ... (2 Replies)
Discussion started by: radhika
2 Replies
Login or Register to Ask a Question