2012-06-20 81 views
0

我在表單文件:SED:從多條線路選擇字段組合成一條線

random stuff 
more random stuff, etc 
more random stuff, etc 
05201206 field1 field2 field3 field4 field5 
05201212 field1 field2 field3 field4 field5 
05201218 field1 field2 field3 field4 field5 

,其中字段是拉特和離子吸附

我想要做的是找到所有的線是與「05」開始,並採取字段1,3 - 從每個,然後打印結果所有到的順序一個單線發現,如:(嘗試寫入KML代碼)

field1, field3, 0 field1, field3, 0 field1, field3, 0 field1, field3, 0 

此外,相關的問題 - 可以墊h在sed中完成?理想的情況是,在打印結果之前,每一個拉特和lons應該除以10.0。

回答

1

你不能在sed做數學。 awk是tokenzing和處理領域的正確工具。

awk '/^05/{ $4/=10.0;$2/=10.0;out=out$2","$4","}END{print out }' inputFile 
+0

同意 - 'awk'是在這裏適當的命令。 [這是一個教程。](http://www.grymoire.com/Unix/Awk.html) –

0

awk顯然是這個職位的合適的工具,但你肯定可以使用sed爲任務的一部分。過濾器是一種有力的想法:

<input sed -n /^05/p     | # print only lines starting "05" 
    awk '{print 0, $2/10", " $4/10", "}' | # print scaled columns 2 and 4 
    sed '1s/^0 //'      | # Remove leading "0 " 
    tr -d '\n'       ; # Remove all newlines 
    echo " 0"        # append trailing "0" and newline 

注意,SEDS是完全多餘的位置(第一個當然會在第一awk的模式匹配代替);問題的關鍵在於,通過構建簡單的工具來完成每項任務並將它們一起運行,您可以非常輕鬆地構建所需的處理過程。