2014-03-13 46 views
0

我已經嘗試了幾種在AWK命令中獲得$ 2到$ 11之間空格的方法,但沒有任何快樂。我猜這是一個printf解決方案,但我無法實現它的工作。Unix Bash:如何使用AWK命令在列之間獲取製表符?

FILE* fp = popen("ps -U root -u root u | awk \"{ print \\$2, \\$11 }\"", "r"); 
+2

將系統調用給什麼樂趣呢?你不能在C中做同樣的事嗎? – devnull

回答

3

可以設置OFS變量,默認情況下是一個空間,製表符(\t):

FILE* fp = popen("ps -U root -u root u | awk 'BEGIN { OFS=\"\\t\" } { print $2, $11 }'", "r"); 

我改變了你的榜樣引號也一樣,當我測試它在我的終端,它的工作這樣一輪(AWK命令在' 'OFS" "

我刪除的$符號你逃跑,因爲我不薄K表他們需要

使用您的命令:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    char buffer[256]; 
    FILE* fp = popen("ps -U root -u root u | awk 'BEGIN { OFS=\"\\t\" } { print $2, $11 }'", "r"); 
    while (fgets(buffer, 256, fp)) { 
     printf("%s", buffer); 
    } 
    return 0; 
} 
+0

我直接粘貼它,並得到:awk:不是一個選項:-OFS =我想知道是我的複雜的字符串與所有它的逃生搞砸了? hmm – COOLBEANS

+0

試過你編輯的建議:awk:1:意想不到的字符''' – COOLBEANS

+0

@COOLBEANS你可以發佈一個包含這一行的可編譯示例嗎? –