【发布时间】:2021-05-25 03:26:52
【问题描述】:
我们必须找出最后 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
需要的输出
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
输出:
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
输出
4$|$Theekshana$|$Second$|$0
5$|$Teju$|$First$|$0
6$|$Theekshitha$|$Second$|$0
我没有提到|作为输出字段分隔符但它仍然出现,为什么会发生这种情况并且差异也为零
我刚接触 unix 6 天,即使很容易也请回答
【问题讨论】:
-
可以说这严格来说是一个 awk 问题,而不是一个 bash 问题——如果您的脚本是 awk 脚本(以
#!/usr/bin/awk -f开头并且正文仅包含),您仍然会遇到问题awk 代码——尽管这将使它负责在纯 awk 中执行sort和tail部分,因此需要进行其他更改)