简体   繁体   中英

Inconsistency in output field separator

We have to find the difference(d) Between last 2 nos and display rows with the highest value of d in ascending order
INPUT

1 | Latha | Third | Vikas | 90 | 91  
2 | Neethu | Second | Meridian | 92 | 94  
3 | Sethu | First | DAV | 86 | 98  
4 | Theekshana | Second | DAV | 97 | 100  
5 | Teju | First | Sangamithra | 89 | 100  
6 | Theekshitha | Second | Sangamithra | 99 |100 

Required OUTPUT

4$Theekshana$Second$DAV$97$100$3  
5$Teju$First$Sangamithra$89$100$11  
3$Sethu$First$DAV$86$98$12 
awk 'BEGIN{FS="|";OFS="$";}{
    avg=sqrt(($5-$6)^2)
    print $1,$2,$3,$4,$5,$6,avg
}'|sort -nk7 -t "$"| tail -3

Output:

4 $ Theekshana $ Second $ DAV $ 97 $ 100$3  
5 $ Teju $ First $ Sangamithra $ 89 $ 100$11  
3 $ Sethu $ First $ DAV $ 86 $ 98$12  

As you can see there is space before and after $ sign but for the last column ( avg ) there is no space, please explain why its happening

2)

awk 'BEGIN{FS=" | ";OFS="$";}{
    avg=sqrt(($5-$6)^2)
    print $1,$2,$3,$4,$5,$6,avg
}'|sort -nk7 -t "$"| tail -3

OUTPUT

4$|$Theekshana$|$Second$|$0  
5$|$Teju$|$First$|$0  
6$|$Theekshitha$|$Second$|$0  

I have not mentiond | as the output field separator but still it appears, why is this happening and the difference is zero too

I am just 6 days old in unix,please answer even if its easy

your field separator is only the pipe symbol, so surrounding whitespace is part of the field definitions and that's what you see in the output. In combined uses pipe has the regex special meaning and need to be escaped. In your second case it means space or space is the field separator.

$ awk 'BEGIN {FS=" *\\| *"; OFS="$"} 
             {d=sqrt(($NF-$(NF-1))^2); $1=$1; 
              print d "\t" $0,d}' file | sort -n | tail -3 | cut -f2-

4$Theekshana$Second$DAV$97$100$3
5$Teju$First$Sangamithra$89$100$11
3$Sethu$First$DAV$86$98$12

a slight rewrite will eliminate the number of fields dependency and fixes the format.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM