2013-04-17 58 views
0

我有了一个ID,人口,区域和省份的列表,看起来像这样:bash脚本 - 在中间划分科拉姆2通过科拉姆但保留1和4两侧

1:517000:405212:Newfoundland and Labrador 
2:137900:5660:Prince Edward Island 
3:751400:72908:New Brunswick 
4:938134:55284:Nova Scotia 
5:7560592:1542056:Quebec 
6:12439755:1076359:Ontario 
7:1170300:647797:Manitoba 
8:996194:651036:Saskatchewan 
9:3183312:661848:Alberta 
10:4168123:944735:British Comumbia 
11:42800:1346106:Northwest Territories 
12:31200:482443:Yukon Territories 
13:29300:2093190:Nunavut 

我需要显示人口密度最低和最高的省份(人口/面积)的名称。我怎样才能将第1列第2列(小数点后两位)分开,而是保持文件信息在任何一边(例如1:1.28:纽芬兰和拉布拉多)。之后,我想我可以将它泵入sort -t: -nk2 | head -n 1sort -t: -nrk2 | head -n 1来拉动它们。

给出的推荐命令是grep。

+0

你可能想看看'awk'。 –

+0

感谢您的回复。我打算使用awk作为最终输出(_awk -F:'{print $ 4'具有最低的人口密度。“}'_)。你是否说我可以将它用于数学呢? – chaoszero112

+1

是的,'awk'也可以做数学。它可以完成数学,线条选择以及其他所有你想做的事情。 –

回答

0

既然你似乎已经得到控制分拣和提取,这里有一个例子awk脚本应该为你工作:

#!/usr/bin/env awk -f 

BEGIN { 
    FS=":" 
    OFS=":" 
    OFMT="%.2f" 
} 

{ 
    print $1,$2/$3,$4 
} 
+0

你的OFS就是我在实现中所缺少的东西。谢谢!现在我可以使它变得更简单。我有'join -t:-13 -22 ./files/capitals.sorted ./files/provinces.sorted | awk -F:'{$ 5 = $ 2/$ 3; print}'OFS =:| sort -t:-nrk5 |头-n 1 | awk -F:'{print $ 4'拥有最高的人口密度。“}”'它的工作方式很sl way。 – chaoszero112