簡體   English   中英

output 字段分隔符不一致

[英]Inconsistency in output field separator

我們必須找到最后 2 個編號之間的差異 (d),並按升序顯示 d 值最高的行
輸入

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 

需要 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  

如您所見, $符號前后有空格,但最后一列( avg )沒有空格,請解釋為什么會這樣

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  

我沒有提到| 作為 output 字段分隔符,但仍然出現,為什么會發生這種情況,差異也為零

我在 unix 才 6 天大,即使很容易也請回答

您的字段分隔符只是 pipe 符號,因此周圍的空格是字段定義的一部分,這就是您在 output 中看到的內容。 組合使用 pipe 具有正則表達式特殊含義,需要轉義。 在第二種情況下,這意味着空格或空格是字段分隔符。

$ 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

輕微的重寫將消除字段依賴的數量並修復格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM