2012-07-29 47 views
-4

我有問題提取列,因爲不是每個列都有一行。如何提取列然後進行總結和排序?

看看圖片:
http://www.dodaj.rs/f/1F/Fw/1dAklQ4M/snap008.jpg

現在我想列出列,例如:

"Label" #2  #6 #sum of #2 and #6 

我想最後一列進行排序,這是#2,#6 #sum

我該怎麼做? THX

+3

發佈一些測試輸入和期望的輸出。 [你試過的](http://whathaveyoutried.com)。 – Thor 2012-07-29 08:55:32

+1

你的問題可以指定更好,如果所有的從你的意見 附加/澄清信息添加到您的 原職。另外請確保提及所有限制,以便您可以得到一些有效的幫助。並非所有人都閱讀 評論。托爾是對的,提供一些可用的樣本輸入(我如何測試針對某個解決方案的解決方案。JPG圖像) 和一些清晰的期望輸出)。 – Levon 2012-07-29 16:37:17

+0

事實上,你添加條件來解決問題,因爲評論給每個答案意味着:a。)你的問題是不明確的,b。)你還沒有探索整個情況,以確切知道你需要什麼 – Alfabravo 2012-07-30 16:16:11

回答

0

使用Gawk的,你可以使用固定寬度的列來讀取數據:

gawk -v FIELDWIDTHS="9 13 16 9 11 11 7 6 6 6 6 10 6 6 6 10 10" '{ 
    print $2, $9, $13, $9 + $13 
}' 

請注意,只有猜列從截圖的寬度。寬度將需要調整。

您也可以合併您想要忽略的列的列寬。

https://www.gnu.org/software/gawk/manual/gawk.html#Constant-Size

+0

而我「FILEDWIDTHS? 因爲它不會工作! – easyyu 2012-07-29 14:08:21

+0

'FIELDWIDTHS'(而不是'FILEDWIDTHS')是列寬的列表。例如,對於'FIELDWIDTHS =「9 13 16」','gawk'將使用列1的前9個字符('$ 1'),列2的後13個字符和列3的後16個字符。 – 2012-07-29 14:21:50

+0

Ufff ..這不是我想要的.. 我忘了說我的桌子是動態的,它改變了evry的時間,所以你的解決方案對我來說是不可接受的。 Thx尋求幫助,但有沒有其他解決方案? – easyyu 2012-07-29 14:30:35

0

一般的答案,只要你的輸入有「標準」的awk /排序字段定界符,就應該像這樣。

awk '{print $0, $2+$3}' | sort -n -k3 

根據你的輸入,你可能不得不修改一些命令的輸入或管道。

+0

但問題是,一般使用的awk不會按我的意願工作。 那是因爲不是每個顏色都被填滿。 – easyyu 2012-07-29 14:15:36

0

試試這個辦法,如果你知道的列數,你可以有有效的輸入:

awk 'NF > 5 {print $0, $2+$3 }' | sort -k3 -n 

這隻會生產線至少有5列。或者,如果有一個範圍你可以像

awk 'NF > 5 && NF < 9 { ... }' | sort ... 

NF是一個預定義的AWK變量,表示當前行的字段(即你的目的數據的列)數。上述過濾掉不符合條件的行例子(這樣你就可以把它們作爲短版的if語句)

你將不得不調整這對您的需求,因爲沒有可用的測試數據。

+0

Thx ..但它通過一些coloumn,我不需要它.. Thx反正求助! – easyyu 2012-07-29 19:59:10

0

假設:1.始於#1的數字總是存在。 2.以前的專欄中沒有編號。 3.第一和第二個字段永遠不會是空的。

你可以看看第一個數字,並從那裏開始:

awk '{ 

# Look for the first digit 
for(I=1 ; I<=NF ; I++) { if ($I ~ /^[[:digit:]]+$/) { break } } 

# Print the necessary fields 
print $2, $(I+1), $(I+5), $(I)+$(I+5) 

}' my_file 
相關問題