2015-05-02 141 views
-1
轉移腳本到C

我有一個腳本,從文件中,各種讀取並顯示數據(殼牌)從殼牌

#!/bin/awk 
    sort -t ' ' -k 10 -r -n log.txt | head -n 10 | awk '{sum+=$10; array[NR,1]=$11; array[NR,2]=$10; next;} END { 

     for (i = 1; i <= 10; i++) 

     printf "%3.0f'\.' %s \b '\-' %s \b '\-' %3.1f'\%' \n", i, array[i,1], array[i,2], array[i,2]/sum*100 

    }' 

示例腳本(殼牌):

1. "http://www.example.org/example/When/200x/2004/11/08/Yellow" - 1116675 - 50.5% 
    2. "http://www.example.org/example/When/200x/2003/07/25/NotGaming" - 220810 - 10.0% 
    3. "http://www.example.org/example/When/200x/2003/07/25/NotGaming" - 183618 - 8.3% 
    4. "http://www.example.org/example/When/200x/2003/07/25/NotGaming" - 161648 - 7.3% 
    5. "http://www.example.org/example/When/200x/2003/07/25/NotGaming" - 160646 - 7.3% 
    6. "http://www.example.org/example/When/200x/2003/07/25/NotGaming" - 156241 - 7.1% 
    7. "http://www.example.org/example/When/200x/2003/07/25/NotGaming" - 62006 - 2.8% 
    8. "http://www.example.org/example/serif.css" - 52140 - 2.4% 
    9. "http://www.example.org/example/serif.css" - 52140 - 2.4% 
10. "-" - 44877 - 2.0% 

我的任務只在C(*。)中做同樣的事情。 我知道如何閱讀文件。已知的grep函數。我不知道如何替換awk函數。

+1

你卡在哪裏?或者你認爲有人會爲你解決問題嗎? – mattias

+0

我知道如何閱讀文件。已知的grep。我不知道如何替換awk函數。 –

+0

你爲什麼想在C中做到這一點?爲什麼你不能使用你的腳本? –

回答

2

不要想着將shell腳本逐行翻譯成一些C代碼,而是想到設計&從頭開始實現C程序(具有與shell腳本相同的功能)。

我猜你正在瞄準一些Linux系統,我想你知道一些C programming

您可能會發現以下C函數有用:qsort(3)用於排序; getline(3)或者fgets(3)可以讀取一行。 malloc(3) & free通用C dynamic memory management; perror(3) & exit(3)(至少對於粗略的錯誤處理); sscanf(3)用於解析以前讀取的行(不要忘記使用返回的項目數);用於正則表達式匹配的regex(3); strstr(3) & strchr(3)在字符串內搜索; snprintf(3),asprintf(3)(Linux或GNU glibc特定!),strdup(3)來構建字符串。

如果您想在C中執行一些HTTP客戶端處理,請考慮使用一些HTTP客戶端庫,如libcurl;如果你想在C中使用HTTP服務器庫,請考慮libonion。我也推薦讀Advanced Linux Programming

我假設你熟悉C.如果沒有,你可能會發現更容易學習,然後使用OcamlPython這樣的任務。

順便說一句,用gcc -Wall -Wextra -g編譯,學習如何使用gdb調試器& valgrind

+0

我現在學習POSIX。謝謝你的提示。這應該是一個簡單的方法。 –

+0

學習Linux可能會更簡單,後來發現Linux和POSIX(這是一個規範)之間的小差別。 –